当模块发生更改时,我可以使 celery 自动重新加载CELERY_IMPORTS
in settings.py
.
我尝试让母模块检测子模块的变化,但它没有检测到子模块的变化。这让我明白检测不是由 celery 递归完成的。我在文档中搜索了它,但没有找到针对我的问题的任何回复。
将我的项目中与芹菜相关的所有内容添加到中真的很困扰CELERY_IMPORTS
来检测变化。
有没有办法告诉芹菜“当项目的任何地方发生任何变化时自动重新加载”。
谢谢你!
Celery --autoreload
不起作用,它是已弃用 https://github.com/celery/celery/issues/1658.
由于您使用的是 django,因此您可以为此编写一个管理命令。
Django 有 autoreload 实用程序,runserver 使用它在代码更改时重新启动 WSGI 服务器。
相同的功能可用于重新加载 celery 工作线程。创建一个名为 celery 的单独管理命令。编写一个函数来杀死现有的工作人员并启动一个新的工作人员。现在将此函数挂接到自动重新加载,如下所示。
import shlex
import subprocess
from django.core.management.base import BaseCommand
from django.utils import autoreload
def restart_celery():
cmd = 'pkill celery'
subprocess.call(shlex.split(cmd))
cmd = 'celery worker -l info -A foo'
subprocess.call(shlex.split(cmd))
class Command(BaseCommand):
def handle(self, *args, **options):
print('Starting celery worker with autoreload...')
# For Django>=2.2
autoreload.run_with_reloader(restart_celery)
# For django<2.1
# autoreload.main(restart_celery)
现在你可以运行 celery workerpython manage.py celery
当代码库发生变化时,它将自动重新加载。
这仅用于开发目的,请勿在生产中使用。代码取自我的其他答案在这里 https://stackoverflow.com/a/43929298/2698552.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)