当Odoo配置文件中workers参数大于0时,Odoo将使用多进程服务器创建相应数量的worker处理请求。在worker创建完成后,通过运行odoo-bin gevent ...命令创建一个新进程,在新进程中会使用gevent来处理longpolling。
evented = False
if len(sys.argv) > 1 and sys.argv[1] == 'gevent':
sys.argv.remove('gevent')
import gevent.monkey
import psycopg2
from gevent.socket import wait_read, wait_write
gevent.monkey.patch_all()
Odoo在激活gevent之后,使用vscode的debug启动时会出现下面的提示:
It seems that the gevent monkey-patching is being used.
Please set an environment variable with:
GEVENT_SUPPORT=True
to enable gevent support in the debugger.
在环境变量中配置GEVENT_SUPPORT=True后,在代码中下断点,会出现断点失效的情况。
解决方法:
- 如果之前配置了环境变量,需要将环境变量中的
GEVENT_SUPPORT=True去掉(重要) - 在
odoo-bin文件中添加一行代码__import__('os').environ['GEVENT_SUPPORT'] = 'true',添加后的文件:
#!/usr/bin/env python3
# enable gevent support in the debugger
__import__('os').environ['GEVENT_SUPPORT'] = 'true'
# set server timezone in UTC before time module imported
__import__('os').environ['TZ'] = 'UTC'
import odoo
if __name__ == "__main__":
odoo.cli.main()