我正在尝试在应用程序中使用stream_framework(不使用Django ),但是在调用stream_framework共享任务时遇到了问题。芹菜似乎找到了任务:
-------------- celery@M3800 v3.1.25 (Cipater)
---- **** -----
--- * *** * -- Linux-4.15.0-34-generic-x86_64-with-Ubuntu-18.04-bionic
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: task:0x7f8d22176dd8
- ** ---------- .> transport: redis://localhost:6379/0
- ** ---------- .> results: redis://localhost:6379/0
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ----
--- ***** ----- [queues]
-------------- .> celery exchange=celery(direct) key=celery
[tasks]
. formshare.processes.feeds.tasks.test_shared_task
. stream_framework.tasks.fanout_operation
. stream_framework.tasks.fanout_operation_hi_priority
. stream_framework.tasks.fanout_operation_low_priority
. stream_framework.tasks.follow_many
. stream_framework.tasks.unfollow_many
[2018-09-17 10:06:28,240: INFO/MainProcess] Connected to redis://localhost:6379/0
[2018-09-17 10:06:28,246: INFO/MainProcess] mingle: searching for neighbors
[2018-09-17 10:06:29,251: INFO/MainProcess] mingle: all alone
我用以下方法来做芹菜:
celery -A formshare.processes.feeds.celery_app worker --loglevel=info
我的celery_app有:
from celery import Celery
celeryApp = Celery('task', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0', include='formshare.processes.feeds.tasks')
问题在于delay()无法运行共享任务。我还在应用程序中创建了一个共享任务,但是当我调用delay()时,也没有调用该任务。我想我需要从我的应用程序中将它们注册为可调用的吗?我似乎在网上找不到任何信息。
我也尝试自动发现任务,但是遇到了同样的问题:
celeryApp.autodiscover_tasks(['stream_framework', 'formshare.processes.feeds'],force=True)
任何想法都受到高度赞赏。
答案 0 :(得分:0)
共享任务是用于在不同应用程序之间实际共享任务的特定事物(我认为主要是Django应用程序,但是我在flask中使用了它们)。
我们遇到了同样的问题,并且要使其正常工作
celery_app.set_default()
关于芹菜实例
否则,解决问题的另一种方法是通过应用程序本身实际调用任务,因此围绕这些内容进行操作
from celery import current_app
.
.
.
current_app.tasks['my.tasks.to.exec'].delay(something)
由于它是一个共享任务,因此始终可以工作,因此在导入时未绑定到任何应用程序,在这种情况下,它属于配置为“ current_app”的应用程序