作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 celery 中,我想将远程 worker 的两个任务链接在一起。有人可以告诉我如何在send_task中指定它吗?还是有其他方法可以调用远程任务?
BR
最佳答案
我试图做同样的事情。我找不到纯粹按其名称生成任务的任何内置功能,但是添加这样的工具并不难:
from celery import Task as BaseTask
class Task(BaseTask):
def __init__(self, name, *args, **kwargs):
super(BaseTask, self).__init__(*args, **kwargs)
self.name = name
(
Task('worker.hello').s('world') |
Task('messaging.email-results').s(email_address='user@company.com')
)()
app.send_task(
'worker.hello', ['world'],
chain=[
Task('messaging.email-results').s(email_address='user@company.com')
]
)
Signature
类(如下面的@Chrismit所述):
from celery import Signature
(
Signature('worker.hello', args=['world']) |
Signature('messaging.email-results', kwargs={'email_address':'user@company.org'})
)()
from celery import Signature
app.send_task(
'worker.hello', ['world'],
chain=[
Signature('messaging.email-results', kwargs={'email_address': 'user@company.com'})
]
)
task_routes
,因此可以将后续任务放置在适当的队列中(例如,在我的示例中,应该知道以messaging.*
开头的任务应该放在'messaging'
队列中)queue
编码到每个Signature
类中。 Celery已经有了从任务名称中派生队列名称的工具,可以依靠该名称:def get_queue_name(task_name):
return app.amqp.router.route({}, task_name)['queue'].name
(
Signature('worker.hello', args=['world']) |
Signature(
'messaging.email-results',
kwargs={'email_address':'user@company.org'},
queue=get_queue_name('messaging.email-results') # If typing the task name twice annoys you, you could subclass Signature to do this automatically
)
)()
task_routes
且任务签名中未指定queue
,则Celery将在工作程序的default_queue
中安排该任务。除非定制,否则为'celery'
。我强烈建议您不要这样做,因为它不是很明确,也不允许进行过多的队列管理,但是尽管如此,它还是一个选择。 关于celery - 通过send_task在celery中链接两个远程任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31239241/
我有一台运行 Celery 和 RabbitMQ 的服务器。但是当我尝试使用 send_task 发送任务时,它只是返回一个 AsyncResult 对象。 但是实际任务并没有运行(即使工作人员和队列
我做了一些迷你框架,以便能够在 rabbitmq 关闭的情况下捕获 celery 的连接错误,它以更优雅的方式处理错误并且它工作得很好很好,除非使用 send_task。 下面是一些代码来阐明这个想法
我在使用 current_app.send_task 时遇到 Celery 队列路由问题 我有两个 worker (每个队列一个) python manage.py celery worker -E
我是一名优秀的程序员,十分优秀!