celery 未处理的 celery 任务
Posted
技术标签:
【中文标题】celery 未处理的 celery 任务【英文标题】:celery task not processed by celery 【发布时间】:2018-06-03 03:09:00 【问题描述】:这里总 celery 和 django noob,如果问题是微不足道的,很抱歉。基本上问题是 @app.task 定义的任何函数都没有被 celery 处理,它只是正常运行,就好像 celery 不存在一样。
我的 celery_app.py 文件是 -
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery(broker=settings.CELERY_BROKER_URL)
app.config_from_object('django.conf:settings')
app.autodiscover_tasks()
if __name__ == '__main__':
app.start()
虽然我的 tasks.py 文件是 -
from project.celery_app import app
@app.task
def mytask():
...
我在终端运行 celery 时得到以下输出 -
-------------- celery@LAPTOP v4.1.0 (latentcall)
---- **** -----
--- * *** * -- Windows-10-10.0.16299-SP0 2017-12-20 19:27:24
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: __main__:0x229ce2884e0
- ** ---------- .> transport: amqp://user:**@localhost:5672/myvhost
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 8 (solo)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. account.tasks.mytask
[2017-12-20 19:27:24,085: INFO/MainProcess] Connected to amqp://user:**@127.0.0.1:5672/myvhost
[2017-12-20 19:27:24,101: INFO/MainProcess] mingle: searching for neighbors
[2017-12-20 19:27:25,126: INFO/MainProcess] mingle: all alone
[2017-12-20 19:27:25,141: WARNING/MainProcess] c:\programdata\anaconda2\envs\myenv\lib\site- packages\celery\fixups\django.py:202: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
warnings.warn('Using settings.DEBUG leads to a memory leak, never '
[2017-12-20 19:27:25,141: INFO/MainProcess] celery@LAPTOP- ready.
所以我的任务是 celery 知道的,但它没有做任何事情。该任务在单击按钮时运行,并且使用 -loglevel=debug 可以看出 celery 不受它的影响。我使用 RabbitMQ 作为代理、celery 4.1.0、python3 和 django-1.10.5。任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:.delay() 实际上是一种快捷方式。如果想提供额外的选项,你必须使用 .apply_async()
官方文档可以在这里找到: http://docs.celeryproject.org/en/latest/userguide/calling.html
【讨论】:
【参考方案2】:正如我所想,一个简单的错误。只需要把mytask()
改成mytask.delay()
,celery就开始接收了。
【讨论】:
以上是关于celery 未处理的 celery 任务的主要内容,如果未能解决你的问题,请参考以下文章