同时创建多个记录时,Odoo崩溃

同时创建多个记录时,Odoo崩溃,odoo,Odoo,我创建了一个方法,在该方法中,我导入一个csv文件,并使用其中包含的数据创建新记录。该方法使用大约1000行的csv。(该方法可以创建大约1000条新记录),但当csv文件超过1200行时,Odoo服务器崩溃,我必须重新启动服务器。这是我的方法和odoo日志 @api.multi @profile def action_import_csv(self): cuenta = 0 self._chequear_extension_csv(self

我创建了一个方法,在该方法中,我导入一个csv文件,并使用其中包含的数据创建新记录。该方法使用大约1000行的csv。(该方法可以创建大约1000条新记录),但当csv文件超过1200行时,Odoo服务器崩溃,我必须重新启动服务器。这是我的方法和odoo日志

   @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',
        }
这是奥多日志

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 
2020-11-04 11:44:23285 15044警告odoo.service.server:已达到线程虚拟实时限制(152/120s)。
2020-11-04 11:44:23289 15044信息odoo odoo.service.server:在重新加载之前转储超过限制线程的堆栈跟踪
2020-11-04 11:44:23520 15044信息odoo.tools.misc:
#线程:(db:odoo)(uid:2)(url:http://localhost:8069/web/dataset/call_button)
文件:“/home/ernesto/.vscode/extensions/ms python.python-2020.5.86806/pythonFiles/lib/python/debugpy/no\u wheels/debugpy/\u vendored/pydev/\u pydev\u bundle/pydev\u monkey.py”,第823行,在调用中__
ret=self.original_func(*self.args,**self.kwargs)
文件:“/usr/lib/python3.6/threading.py”,第884行,在_bootstrap中
self.\u bootstrap\u inner()
文件:“/usr/lib/python3.6/threading.py”,第916行,在bootstrap\u内部
self.run()
文件:“/usr/lib/python3.6/threading.py”,第864行,正在运行
自我目标(*自我参数,**自我参数)
文件:“/usr/lib/python3.6/socketserver.py”,第654行,进程中\u请求\u线程
自我完成请求(请求、客户地址)
文件:“/usr/lib/python3.6/socketserver.py”,第364行,在finish_请求中
self.RequestHandlerClass(请求、客户端地址、self)
文件:“/usr/lib/python3.6/socketserver.py”,第724行,在__
self.handle()
文件:“/usr/local/lib/python3.6/dist packages/werkzeug/service.py”,第228行,在handle中
rv=BaseHTTPRequestHandler.handle(自)
文件:“/usr/lib/python3.6/http/server.py”,第418行,在handle中
self.handle_one_请求()
文件:“/usr/local/lib/python3.6/dist packages/werkzeug/service.py”,第263行,在handle\u one\u请求中
返回self.run_wsgi()
文件:“/usr/local/lib/python3.6/dist-packages/werkzeug/service.py”,第205行,在run\u wsgi中
执行(self.server.app)
文件:“/usr/local/lib/python3.6/dist packages/werkzeug/serving.py”,执行中第193行
应用程序=应用程序(环境,启动响应)
文件:“/home/ernesto/odoo12/odoo/service/server.py”,第434行,在应用程序中
返回self.app(e,s)
文件:“/home/ernesto/odoo12/odoo/service/wsgi_server.py”,第142行,在应用程序中
返回应用程序\u未经验证(环境、启动\u响应)
文件:“/home/ernesto/odoo12/odoo/service/wsgi_server.py”,第117行,在应用程序中
结果=odoo.http.root(环境,启动\u响应)
文件:“/home/ernesto/odoo12/odoo/http.py”,第1320行,在调用中__
返回自调度(环境、启动和响应)
文件:“/home/ernesto/odoo12/odoo/http.py”,第1293行,在调用中__
返回self.app(环境,开始)
文件:“/usr/local/lib/python3.6/dist-packages/werkzeug/wsgi.py”,第599行,在__
返回self.app(环境、启动和响应)
文件:“/home/ernesto/odoo12/odoo/http.py”,第1488行,在调度中
结果=ir\u http.\u dispatch()
文件:“/home/ernesto/odoo12/addons/auth_signup/models/ir_http.py”,第19行,在调度中
返回super(Http,cls)。\u dispatch()
文件:“/home/ernesto/odoo12/addons/web_editor/models/ir_http.py”,第22行,在调度中
返回超级(IrHttp,cls)。\u dispatch()
文件:“/home/ernesto/odoo12/odoo/addons/base/models/ir_http.py”,第203行,在
结果=request.dispatch()
文件:“/home/ernesto/odoo12/odoo/http.py”,第698行,在调度中
结果=self.\u调用函数(**self.params)
文件:“/home/ernesto/odoo12/odoo/http.py”,第346行,在调用函数中
返回选中的\u调用(self.db、*args、**kwargs)
文件:“/home/ernesto/odoo12/odoo/service/model.py”,第98行,在包装器中
返回f(数据库名,*args,**kwargs)
文件:“/home/ernesto/odoo12/odoo/http.py”,第339行,在checked_调用中
结果=自身终点(*a,**kw)
文件:“/home/ernesto/odoo12/odoo/http.py”,第941行,在调用中__
返回自方法(*参数,**kw)
文件:“/home/ernesto/odoo12/odoo/http.py”,第519行,作为响应
响应=f(*参数,**kw)
文件:“/home/ernesto/odoo12/addons/web/controllers/main.py”,第966行,在call_按钮中
action=self.\u调用\u kw(模型、方法、参数,{})
文件:“/home/ernesto/odoo12/addons/web/controllers/main.py”,第954行,单位为kw
返回调用(request.env[model],方法,args,kwargs)
文件:“/home/ernesto/odoo12/odoo/api.py”,第759行,在call\u-kw中
return\u call\u kw\u multi(方法、模型、参数、kwargs)
文件:“/home/ernesto/odoo12/odoo/api.py”,第746行,在调用中
结果=方法(recs、*args、**kwargs)
文件:“”,第2行,正在运行\u导入\u csv
文件:“/home/ernesto/odoo12/odoo/tools/profiler.py”,第128行,在odooProfile中
结果=方法(*args,**kwargs)
文件:“/home/ernesto/odoo12/extra\u addons/utepda\u brigadas/models/model\u wizard.py”,第81行,在操作中\u导入\u csv
新锐旅=创建旅(新)
文件:“”,第2行,在创建中
文件:“/home/ernesto/odoo12/odoo/api.py”,第461行,在“model\u create\u multi”中
返回创建(self,[arg])
文件:“/home/ernesto/odoo12/addons/mail/models/mail_thread.py”,第278行,在create中
线程。\消息\日志(正文=\创建了“%s”)%doc\u名称)
文件:“/home/ernesto/odoo12/addons/mail/models/mail\u thread.py”,第2230行,在消息日志中
message=self.env['mail.message'].sudo().create(message_值)
文件:“”,第2行,在创建中
文件:“/home/ernesto/odoo12/odoo/api.py”,第440行,在“model\u create\u single”中
返回创建(self,arg)
文件:“/home/ernesto/odoo12/addons/mail/models/mail_message.py”,第990行,在create中
消息=超级(消息,自我)。创建(值)
文件:“”,第2行,在创建中
文件:“/home/ernesto/odoo12/odoo/api.py”,第461行,在“model\u create\u multi”中
返回创建(self,[arg])
文件:“/home/ernesto/odoo12/odoo/models.py”,第3583行,在create中
记录=自创建(数据列表)
文件:“/home/ernesto/odoo12/odoo/models.py”,第3669行,在创建
col_val=字段。将_转换为_列(val、self、storage)
文件:“/home”
--limit-time-real 10000

limit_time_real = 480