36

我们有一个运行 celery worker 的服务器和一个 Redis 队列。任务是在该服务器上定义的。
我需要能够从远程机器调用这些任务。
我知道它已经完成使用send_task,但我仍然没有弄清楚如何?我如何知道send_task队列在哪里?我在哪里传递连接参数(或任何需要的)?我一直在寻找几个小时,我能找到的是:

from celery.execute import send_task
send_task('tasks.add')

好吧,这意味着我也需要celery在我的呼叫机上。但是我还需要设置什么?

4

5 回答 5

57

这可能是一种方式:创建一个 Celery 对象并使用该对象的 send_task,该对象可以具有查找代理的配置。

from celery import Celery
celery = Celery()
celery.config_from_object('celeryconfig')
celery.send_task('tasks.add', (2,2))

celeryconfig 是一个包含 celery 配置的文件,还有其他方法可以在 celery 对象上设置配置。

于 2013-10-08T20:36:55.110 回答
0

定义路由规则有多种方式,其中最通用的是自定义路由对象。在所有情况下,调用者只提供一个routing_key参数send_taskdelay或者apply_async路由器决定将任务发送到哪个队列。

于 2013-08-26T01:52:56.910 回答
0

在远程机器上,启动 celery,broker_url 指向你想要运行任务的机器。然后只需提交任务(如果您有特定的队列要提交,然后添加适当的路由键)。

于 2013-12-09T18:52:39.700 回答
0

根据最新更新,此方法是应用程序方法之一。例如:

from project.celery_general import general_app

# general app is celery app you defined
general_app.send_task(name='your_task_name', *args, **kwargs)

参考

于 2021-10-10T16:01:15.273 回答
-7

你发现的是对的。

from celery.execute import send_task

send_task('tasks.add')

如果需要任何参数

send_task('tasks.add', kwargs={'a': 1, 'b': 2})
于 2016-09-27T07:37:10.803 回答