Jas*_*enX 20 django celery django-celery
如果我在芹菜运行时对tasks.py进行了更改,是否有一种机制可以重新加载更新的代码?或者我必须关闭芹菜重新装载?
我读过芹菜--autoreload
在旧版本中有一个参数,但我在当前版本中找不到它:
celery: error: unrecognized arguments: --autoreload
Chi*_*and 35
不幸的是--autoreload
不起作用,它已被弃用.
您可以使用Watchdog为Watchmedo提供shell实用程序,以根据文件事件执行操作.
pip install watchdog
Run Code Online (Sandbox Code Playgroud)
你可以开始工作
watchmedo auto-restart -- celery worker -l info -A foo
Run Code Online (Sandbox Code Playgroud)
默认情况下,它将监视当前目录中的所有文件.这些可以通过传递相应的参数来改变.
watchmedo auto-restart -d . -p '*.py' -- celery worker -l info -A foo
Run Code Online (Sandbox Code Playgroud)
如果你正在使用django并且不想依赖看门狗,那么有一个简单的技巧可以实现这一点.Django具有自动重载实用程序,当代码更改时,runserver将使用该实用程序重新启动WSGI服务器.
相同的功能可用于重新加载芹菜工人.创建一个名为celery的独立管理命令.编写一个函数来杀死现有的worker并启动一个新的worker.现在将此函数挂钩到autoreload,如下所示.
import sys
import shlex
import subprocess
from django.core.management.base import BaseCommand
from django.utils import autoreload
class Command(BaseCommand):
def handle(self, *args, **options):
autoreload.run_with_reloader(self._restart_celery)
@classmethod
def _restart_celery(cls):
if sys.platform == "win32":
cls.run('taskkill /f /t /im celery.exe')
cls.run('celery -A phoenix worker --loglevel=info --pool=solo')
else: # probably ok for linux2, cygwin and darwin. Not sure about os2, os2emx, riscos and atheos
cls.run('pkill celery')
cls.run('celery worker -l info -A foo')
@staticmethod
def run(cmd):
subprocess.call(shlex.split(cmd))
Run Code Online (Sandbox Code Playgroud)
现在,您可以运行celery worker,python manage.py celery
在代码库更改时将自动加载.
这仅用于开发目的,不在生产中使用.
归档时间: |
|
查看次数: |
7165 次 |
最近记录: |