我有两个python项目。两者都是用芹菜启用的。我在这里尝试做的是来自项目A的任务,我使用send_task()方法发送任务。我正在发送的任务是在项目B中,所以项目B的工作人员正在工作,并且正在显示任务。在这种情况下,一切都运行得很好。但是当我让项目A的worker up时,它开始在这里提供关键错误。这里到底发生了什么: 1)在send_task()的第一次尝试中,项目B的worker正在接收任务。一切都像预期的那样工作。2)第二次尝试send_task()失败。因为项目A的工作人员正在尝试接收项目A中不存在的任务,所以它抛出了关键错误。3)在send_task()的第三次尝试中,项目B的worker正在接收任务。一切都像预期的那样工作。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=“主题”,我尝试使用直接,但它不起作用。请指导我完成这件事。
发布于 2016-06-06 15:16:26
两个工作进程都在使用同一队列中的任务。
当你启动worker A时,它还没有识别出任何任务(从log中可以看到)。
[tasks]
工人B只识别了一项任务。
[tasks]
. mplogin.sync.register
你必须确保两位员工都能认识到这两项任务。您可以通过正确配置芹菜来做到这一点。
您还可以使用CELERY_IMPORTS
来提到celery导入的模块列表。
CELERY_IMPORTS = ('foo.bar.app1.task1', 'foo.bar.app2.task2')
通过正确导入任务,您可以避免该错误。
https://stackoverflow.com/questions/37606835
复制