Celery@worker_process_init.connect在工作启动时未运行



我在Windows上运行Celery,我知道它在版本4中不受支持,但它在很大程度上仍然可以使用eventlet。

我试图在启动工作程序时运行这个init函数:

db = None
@worker_process_init.connect
def init_worker(**kwargs):
print('Initializing database connection for worker.')
global db
db = DB(dbname=os.getenv('DBNAME'))

我正在使用此命令运行工作程序:celery -A celeryapp.tasks worker -l info -P eventlet -c 8 -Q database

我不确定这是Windows的事情,eventlet的事情,还是其他的事情,但启动工作程序时,我的init函数没有运行。

worker_process_init没有运行,因为没有;工人过程";启动。

如果你参考芹菜文档,它说worker_process_init是";在所有池子进程中调度";。在此上下文中,子进程表示辅助进程

当您使用eventlet、gevent或任何其他基于线程的池时,它们不会启动子进程。为了启动子进程,您需要使用多处理池,例如prefork(默认(。

如果您试图在工作进程启动时初始化数据库连接,则可能需要查看worker_init

相关内容

  • 没有找到相关文章

最新更新