• odoo 多线程处理(AttributeError: environments)


    可以查看odoo 源码的例子:

    按常规的使用多线程调用方法,会出现环境错误.

    # -*- coding: utf-8 -*-
    # Part of Odoo. See LICENSE file for full copyright and licensing details.
    
    #
    # Order Point Method:
    #    - Order if the virtual stock of today is below the min of the defined order point
    #
    
    from odoo import api, models, tools
    
    import logging
    import threading
    
    _logger = logging.getLogger(__name__)
    
    
    class StockSchedulerCompute(models.TransientModel):
        _name = 'stock.scheduler.compute'
        _description = 'Run Scheduler Manually'
    
        def _procure_calculation_orderpoint(self):
            with api.Environment.manage():
                # As this function is in a new thread, I need to open a new cursor, because the old one may be closed
                new_cr = self.pool.cursor()
                self = self.with_env(self.env(cr=new_cr))
                scheduler_cron = self.sudo().env.ref('stock.ir_cron_scheduler_action')
                # Avoid to run the scheduler multiple times in the same time
                try:
                    with tools.mute_logger('odoo.sql_db'):
                        self._cr.execute("SELECT id FROM ir_cron WHERE id = %s FOR UPDATE NOWAIT", (scheduler_cron.id,))
                except Exception:
                    _logger.info('Attempt to run procurement scheduler aborted, as already running')
                    self._cr.rollback()
                    self._cr.close()
                    return {}
    
                for company in self.env.user.company_ids:
                    self.env['procurement.group'].run_scheduler(
                        use_new_cursor=self._cr.dbname,
                        company_id=company.id)
                new_cr.close()
                return {}
    
        def procure_calculation(self):
            threaded_calculation = threading.Thread(target=self._procure_calculation_orderpoint, args=())
            threaded_calculation.start()
            return {'type': 'ir.actions.act_window_close'}
    

    其他办法:

    放弃使用env,直接使用sql原生语句查询,
    new_cr = self.pool.cursor()
    new_cr.execute('select * from res_partner')
    res = new_cr.fetchall()

  • 相关阅读:
    任务栏恢复添加快捷方式(即桌快出现箭头)
    去除桌面快捷方式小箭头
    PHP Warning: date() [function.date]: It is not safe to rely on the system's timezone 转
    坑爹的 mysql error 2003!
    浅谈nvm环境搭建与利用nvm安装nodejs
    本地SVN服务器的搭建(WINDOWS环境)
    DevExpress学习之Gridcontrol
    string 和 StringBuilder 的简单理解!
    关注,被关注!
    C# Using 用法
  • 原文地址:https://www.cnblogs.com/qianxunman/p/12205170.html
Copyright © 2020-2023  润新知