我有两个python项目。两者都是用芹菜启用的。我在这里尝试做的是从项目A中使用send_task()方法发送任务。我正在发送的任务在项目B中。所以项目B的工作人员已经起床,正在显示任务。在这种情况下,一切都很好。但当我让项目A的工作人员在这里开始提供关键错误。这里到底发生了什么1) 在send_task()的第一次尝试中,项目B的工作人员正在接收任务。一切都在按预期进行。2) 在第二次尝试send_task()时失败。因为项目A的工作人员正在尝试接收项目A中不存在的任务,所以它的抛出键错误。3) 在send_task()的第三次尝试中,项目B的工作人员正在接收任务。一切都在按预期进行。4) 在send_task()的第四次尝试中,它失败了。因为项目A的工作人员正在尝试接收项目A中不存在的任务,所以它的抛出键错误。这个过程不断重复。
项目A队列:-
.> mplogin.sync exchange=mplogin(topic) key=mplogin.sync
[tasks]
[2016-06-03 11:11:04,427: INFO/MainProcess] Connected to amqp://guest:**@localhost:5672//
[2016-06-03 11:11:04,468: INFO/MainProcess] mingle: searching for neighbors
[2016-06-03 11:11:05,476: INFO/MainProcess] mingle: all alone
[2016-06-03 11:11:05,984: WARNING/MainProcess] celery@gaurav-All-Series ready.
项目B队列:-
.> mplogin.sync exchange=mplogin(topic) key=mplogin.sync
[tasks]
. mplogin.sync.register
[2016-06-03 11:12:57,941: INFO/MainProcess] Connected to amqp://guest:**@localhost:5672//
[2016-06-03 11:12:57,949: INFO/MainProcess] mingle: searching for neighbors
[2016-06-03 11:12:58,955: INFO/MainProcess] mingle: all alone
[2016-06-03 11:12:58,980: WARNING/MainProcess] /usr/local/lib/python2.7/dist-packages/kombu/pidbox.py:75: UserWarning: A node named celery@gaurav-All-Series is already using this process mailbox!
Maybe you forgot to shutdown the other node or did not do so properly?
Or if you meant to start multiple nodes on the same host please make sure
you give each node a unique node name!
warnings.warn(W_PIDBOX_IN_USE.format(node=self))
[2016-06-03 11:12:58,983: WARNING/MainProcess] celery@gaurav-All-Series ready.
我正在用让两个工人都化妆
celery -A tasks worker -l info
项目B:-中的任务
@sync_app.task(name='mplogin.sync.register')
def register(user_obj):
return "Its working!!!!"
从项目A发送任务:
from tasks import login_async_app
abc = login_async_app.send_task('mplogin.sync.register',kwargs={'user_obj': 500})
sync_app是项目B&login_async_app是项目A中的芹菜应用程序。
我认为我面临的这个问题是因为exchange_type="topic"我试过使用direct,但不起作用。请引导我通过这个。
两个工作者都在使用来自同一队列的任务。
当您启动工作者A时,它还没有识别任何任务(如日志所示)。
[tasks]
工人B只识别了一个任务。
[tasks]
. mplogin.sync.register
你必须确保两个工人都能识别这两项任务。您可以通过正确配置芹菜来做到这一点。
您还可以使用CELERY_IMPORTS
来提及芹菜导入的模块列表。
CELERY_IMPORTS = ('foo.bar.app1.task1', 'foo.bar.app2.task2')
通过正确导入任务,可以避免该错误。