python - 如何从 django 启动远程 celery worker
问题描述
我正在尝试将 django 与 celery 结合使用。
因此我遇到了autodiscover_tasks()
,我不完全确定如何使用它们。celery 工作人员获取其他应用程序(在本例中为节点后端)添加的任务。
到目前为止,我用它来启动工人:
celery worker -Q extraction --hostname=extraction_worker
效果很好。
现在我不确定 django-celery 集成的总体思路是什么。工作人员是否仍应从外部启动(例如使用上面的命令),还是应该从 django 应用程序进行管理和启动?
我的 celery.py 看起来像:
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'main.settings')
app = Celery('app')
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
然后我有 2 个包含 tasks.py 文件的应用程序:
@shared_task
def extraction(total):
return 'Task executed'
我现在如何注册 django 来为这些任务注册工作人员?
解决方案
您只需按照记录启动工作进程,您不需要注册任何其他内容
在生产环境中,您将希望在后台将工作程序作为守护程序运行 - 请参阅守护程序 - 但对于测试和开发,能够使用 celery worker manage 命令启动工作程序实例很有用,就像您一样d 使用 Django 的 manage.py 运行服务器:
celery -A proj worker -l info
有关可用命令行选项的完整列表,请使用帮助命令:
celery help
celery worker 在运行时收集/注册任务,并消耗它发现的任务
推荐阅读
- python - 在 Python 中从谷歌驱动器访问文件
- rust - 包括长选项,不包括帮助和版本的短选项
- vb.net - vb.net If Else 语句
- file - TCL删除文件
- python - 根据引用对象中的 manytomanyfield 的属性获取查询集
- typescript - 嵌套包装函数返回 Promise
> - javascript - 如何在firebase auth中获得不同的用户
- python - 如何安全地实现编辑根文件的用户 python 脚本
- angular - 如何在 Angular Universal 中支持交叉获取/节点获取?
- php - 自定义 Wordpress 简码未在前端显示表单