python - 如何在烧瓶应用程序中使用芹菜将任务从一台服务器发送到另一台服务器
问题描述
我有两个烧瓶应用程序,一个在服务器 A 上,另一个在服务器 B 上。我想要做的是在某些条件下从服务器 A 上的应用程序生成一个异步任务并将其发送到服务器 B 上的应用程序(即调用一个函数在服务器 B) 上。我认为芹菜发送任务方法将用于它但不知道如何使用它。
假设我在服务器 B 上的应用程序中有一个函数“func”
def func(x):
return x
我想在服务器 A 上的应用程序中的另一个函数“somefunc”中调用“func”,如下所示:
def somefunc(x):
if condition is True:
func(x)
我将如何使用 celery 来实现这个逻辑?请提前帮助和感谢
解决方案
在服务 A 上,您将拥有:
from celery.execute import send_task
@app.route('/')
def endpoint():
if cond(x):
send_task(
'task_service_b',
(param1, param2),
exchange='if u have a specific one',
routing_key='a routing key'
)
在服务 b 上,您需要让应用程序监听“路由键”并绑定到交换器“如果你有一个特定的”,
messaging_exchange = Exchange('if u have a specific one')
bindings = (
binding(messaging_exchange, routing_key=routing_key)
for routing_key in ['a routing key']
)
default_binding = binding(
Exchange(celery_app.conf.task_default_queue),
routing_key=celery_app.conf.task_default_queue
)
celery_app.conf.task_queues = [
# default queue has same routing key as name of the queue
Queue(celery_app.conf.task_default_queue, [default_binding]),
Queue('service.b.queue', list(bindings))
]
否则你可以绕过所有,只send_task
进入服务 b 队列。您将需要服务 b 上的芹菜工人,因为该任务需要由工人使用
推荐阅读
- c - 如何理解指针数组的类型转换?
- openlayers - OpenLayers 可以仅更改倍数而不是中间图像的大小(使用 ol.source.Zoomify 的参数“大小”)吗?
- json - 使用 JSON 创建节点之间的链接/关系时未定义变量
- xslt-1.0 - 如何修复“字符串未被识别为有效的日期时间。” BizTalk 测试地图中的错误?
- python - 如何使用 SQLalchemy 将 CSV 加载到数据库中?
- sql - 如何在更高级别聚合加权平均值字段?
- python - 触摸屏滚动 Tkinter Python
- java - 无法使用 Apache cxf soap 通过代理隧道
- angular - 如何在 html 属性中使用 Angular 指令
- html - 自动填充表单不适用于所有浏览器