現象
接上一篇,在成功實作 單一實體多庫模式下定時任務的問題后,現在可以實作多個庫的定時任務跑起來了,
但是發現在任務跑幾次后就不再執行了,每次重啟odoo實體就會恢復,但是很快又不行了,
分析
查看行程發現,后臺開啟的兩個定時任務執行緒直接消失了,,,
查看日志,有段報錯,如下:
for db_name, registry in registries.d.items():
RuntimeError: OrderedDict mutated during iteration
可以定位到問題出現server.py檔案中的cron_thread函式上,
經過實驗發現,python3版本的OrderedDict物件在迭代的程序中如果新增或刪key物件,則會報這個錯誤,python2版本不受影響,目前測驗的是python3.5+版本都會受到影響,
解決方案
問題定位后,解決方法也很簡單
def cron_thread(self, number):
from odoo.addons.base.models.ir_cron import ir_cron
while True:
time.sleep(SLEEP_INTERVAL + number) # Steve Reich timing style
registries = odoo.modules.registry.Registry.registries
_logger.debug('cron%d polling for jobs', number)
for db_name, registry in list(registries.d.items()):
if registry.ready:
thread = threading.currentThread()
thread.start_time = time.time()
try:
ir_cron._acquire_job(db_name)
except Exception:
_logger.warning('cron%d encountered an Exception:', number, exc_info=True)
thread.start_time = None
每次迭代前copy一個新的物件,這樣雖然解決的問題,但是挺奇怪的,這個到底在哪被修改的呢???
留個坑,待填,,,
本文來自博客園,作者:老韓頭的開發日常,轉載請注明原文鏈接:https://www.cnblogs.com/xushuotec/p/15240954.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/298267.html
標籤:其他
上一篇:【odoo】【知識雜談】單一實體多庫模式下定時任務執行緒崩了
下一篇:H5、C3基礎知識筆記
