I have created a method where I import a csv file and I create new records with the data it contains. The method works with as csv with around 1000 lines. (The method can create around 1000 new records), but when the csv file have more than 1200 lines, Odoo server crashes and I have to restart the server. Here is my method and the odoo log
@api.multi @profile def action_import_csv(self): cuenta = 0 self._chequear_extension_csv(self.archivo_filename) res = base64.b64decode(self.archivo) text = res.decode("UTF-8") reader = csv.DictReader(io.StringIO(text)) brigadista = self.env['utepda_brigadas.brigadista'] brigada = self.env['utepda_brigadas.brigada'] brigada_cr = self.env.cr brigadista_brigada = self.env['utepda_brigadas.brigadista_brigada'] count = 0 campos = [ 'BRIGADA', 'NOMBRE', 'CEDULA', 'CARGO', 'JORNALES', 'COSTO_JORNADA' ] rows = list(reader) totalrows = len(rows) print("La cantidad de filas es {}".format(totalrows)) for index,row in enumerate(rows): print("Index -> {} -> {}".format(index,row)) if count == 0: count = 1 self._chequear_campos_csv(campos, row.keys()) else: codigo_brigada = row['BRIGADA'] nombre = row['NOMBRE'] cedula = row['CEDULA'].replace('-', '') cargo = row['CARGO'] dias_trabajados = row['JORNALES'] total_jornada = row['COSTO_JORNADA'] fecha = self.fecha total = int(dias_trabajados) * int(total_jornada) existe_brigadista = brigadista.search([['cedula', '=', cedula]],limit=1) brigada_actual = brigada.search([['codigo', '=', codigo_brigada]],limit=1) #brigada_cr.execute( # "SELECT id FROM public.utepda_brigada_brigada WHERE codigo=%s" # % codigo_brigada) #res = brigada_cr.fetchone() #brigada_actual = brigada.search([['codigo', '=', codigo_brigada]], #limit=1) #brigada_actual = res[0] if not existe_brigadista.id: new = { 'name': nombre, 'cedula': cedula, 'cargo': cargo, 'estado': "nuevo", 'brigada_ids': [(0, _, { 'fecha': fecha, 'dias_trabajados': dias_trabajados, 'total': total, 'brigada_id': brigada_actual.id })] } nuevo_brigadista = brigadista.create(new) if nuevo_brigadista.id: cuenta = cuenta+1 print("""{} Se ha insertado el brigadista {} con nombre {}""".format(cuenta,nuevo_brigadista.id, nuevo_brigadista.name)) #existe_brigadista = existe_brigadista[0] else: existe_brigadista.write({ 'estado': "reportado", 'brigada_ids': [(0, _, { 'fecha': fecha, 'dias_trabajados': dias_trabajados, 'total': total, 'brigada_id': brigada_actual.id })] }) fecha_format = datetime.strftime(self.fecha, '%m/%Y') no_reportados = brigadista.search( [['fecha_ultimo_reporte', '!=', fecha_format]]) no_reportados.write({'estado': "no_reportado"}) return { 'type': 'ir.actions.client', 'tag': 'reload', }
Here is the Odoo log
2020-11-04 11:44:23,285 15044 WARNING odoo odoo.service.server: Thread <Thread(odoo.service.http.request.140355723687680, started 140355723687680)> virtual real time limit (152/120s) reached.
2020-11-04 11:44:23,289 15044 INFO odoo odoo.service.server: Dumping stacktrace of limit exceeding threads before reloading
2020-11-04 11:44:23,520 15044 INFO odoo odoo.tools.misc:
# Thread: <Thread(odoo.service.http.request.140355723687680, started 140355723687680)> (db:odoo) (uid:2) (url:http://localhost:8069/web/dataset/call_button)
File: "/home/ernesto/.vscode/extensions/ms-python.python-2020.5.86806/pythonFiles/lib/python/debugpy/no_wheels/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py", line 823, in __call__
ret = self.original_func(*self.args, **self.kwargs)
File: "/usr/lib/python3.6/threading.py", line 884, in _bootstrap
self._bootstrap_inner()
File: "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File: "/usr/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File: "/usr/lib/python3.6/socketserver.py", line 654, in process_request_thread
self.finish_request(request, client_address)
File: "/usr/lib/python3.6/socketserver.py", line 364, in finish_request
self.RequestHandlerClass(request, client_address, self)
File: "/usr/lib/python3.6/socketserver.py", line 724, in __init__
self.handle()
File: "/usr/local/lib/python3.6/dist-packages/werkzeug/serving.py", line 228, in handle
rv = BaseHTTPRequestHandler.handle(self)
File: "/usr/lib/python3.6/http/server.py", line 418, in handle
self.handle_one_request()
File: "/usr/local/lib/python3.6/dist-packages/werkzeug/serving.py", line 263, in handle_one_request
return self.run_wsgi()
File: "/usr/local/lib/python3.6/dist-packages/werkzeug/serving.py", line 205, in run_wsgi
execute(self.server.app)
File: "/usr/local/lib/python3.6/dist-packages/werkzeug/serving.py", line 193, in execute
application_iter = app(environ, start_response)
File: "/home/ernesto/odoo12/odoo/service/server.py", line 434, in app
return self.app(e, s)
File: "/home/ernesto/odoo12/odoo/service/wsgi_server.py", line 142, in application
return application_unproxied(environ, start_response)
File: "/home/ernesto/odoo12/odoo/service/wsgi_server.py", line 117, in application_unproxied
result = odoo.http.root(environ, start_response)
File: "/home/ernesto/odoo12/odoo/http.py", line 1320, in __call__
return self.dispatch(environ, start_response)
File: "/home/ernesto/odoo12/odoo/http.py", line 1293, in __call__
return self.app(environ, start_wrapped)
File: "/usr/local/lib/python3.6/dist-packages/werkzeug/wsgi.py", line 599, in __call__
return self.app(environ, start_response)
File: "/home/ernesto/odoo12/odoo/http.py", line 1488, in dispatch
result = ir_http._dispatch()
File: "/home/ernesto/odoo12/addons/auth_signup/models/ir_http.py", line 19, in _dispatch
return super(Http, cls)._dispatch()
File: "/home/ernesto/odoo12/addons/web_editor/models/ir_http.py", line 22, in _dispatch
return super(IrHttp, cls)._dispatch()
File: "/home/ernesto/odoo12/odoo/addons/base/models/ir_http.py", line 203, in _dispatch
result = request.dispatch()
File: "/home/ernesto/odoo12/odoo/http.py", line 698, in dispatch
result = self._call_function(**self.params)
File: "/home/ernesto/odoo12/odoo/http.py", line 346, in _call_function
return checked_call(self.db, *args, **kwargs)
File: "/home/ernesto/odoo12/odoo/service/model.py", line 98, in wrapper
return f(dbname, *args, **kwargs)
File: "/home/ernesto/odoo12/odoo/http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File: "/home/ernesto/odoo12/odoo/http.py", line 941, in __call__
return self.method(*args, **kw)
File: "/home/ernesto/odoo12/odoo/http.py", line 519, in response_wrap
response = f(*args, **kw)
File: "/home/ernesto/odoo12/addons/web/controllers/main.py", line 966, in call_button
action = self._call_kw(model, method, args, {})
File: "/home/ernesto/odoo12/addons/web/controllers/main.py", line 954, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File: "/home/ernesto/odoo12/odoo/api.py", line 759, in call_kw
return _call_kw_multi(method, model, args, kwargs)
File: "/home/ernesto/odoo12/odoo/api.py", line 746, in _call_kw_multi
result = method(recs, *args, **kwargs)
File: "<decorator-gen-127>", line 2, in action_import_csv
File: "/home/ernesto/odoo12/odoo/tools/profiler.py", line 128, in _odooProfile
result = method(*args, **kwargs)
File: "/home/ernesto/odoo12/extra_addons/utepda_brigadas/models/model_wizard.py", line 81, in action_import_csv
nuevo_brigadista = brigadista.create(new)
File: "<decorator-gen-111>", line 2, in create
File: "/home/ernesto/odoo12/odoo/api.py", line 461, in _model_create_multi
return create(self, [arg])
File: "/home/ernesto/odoo12/addons/mail/models/mail_thread.py", line 278, in create
thread._message_log(body=_('%s created') % doc_name)
File: "/home/ernesto/odoo12/addons/mail/models/mail_thread.py", line 2230, in _message_log
message = self.env['mail.message'].sudo().create(message_values)
File: "<decorator-gen-107>", line 2, in create
File: "/home/ernesto/odoo12/odoo/api.py", line 440, in _model_create_single
return create(self, arg)
File: "/home/ernesto/odoo12/addons/mail/models/mail_message.py", line 990, in create
message = super(Message, self).create(values)
File: "<decorator-gen-3>", line 2, in create
File: "/home/ernesto/odoo12/odoo/api.py", line 461, in _model_create_multi
return create(self, [arg])
File: "/home/ernesto/odoo12/odoo/models.py", line 3583, in create
records = self._create(data_list)
File: "/home/ernesto/odoo12/odoo/models.py", line 3669, in _create
col_val = field.convert_to_column(val, self, stored)
File: "/home/ernesto/odoo12/odoo/fields.py", line 1555, in convert_to_column
strip_classes=self.strip_classes)
File: "/home/ernesto/odoo12/odoo/tools/mail.py", line 227, in html_sanitize
cleaned = cleaner.clean_html(src)
File: "/usr/local/lib/python3.6/dist-packages/lxml/html/clean.py", line 517, in clean_html
doc = fromstring(html)
File: "/usr/local/lib/python3.6/dist-packages/lxml/html/__init__.py", line 876, in fromstring
doc = document_fromstring(html, parser=parser, base_url=base_url, **kw)
File: "/usr/local/lib/python3.6/dist-packages/lxml/html/__init__.py", line 762, in document_fromstring
value = etree.fromstring(html, parser, **kw)
2020-11-04 11:44:23,522 15044 INFO odoo odoo.service.server: Initiating server reload