芹菜任务从另一种编程语言执行代码

Posted

技术标签:

【中文标题】芹菜任务从另一种编程语言执行代码【英文标题】:Celery task executing code from another programming language 【发布时间】:2013-07-05 11:33:10 【问题描述】:

我正在尝试从 Celery 任务中调用编译/解释的代码。代码不是用 Python 编写的。

我想知道是否有比我想的更好的解决方案。

解决方案 1。启动另一个进程并执行/解释我感兴趣的一段代码。这会产生创建和终止进程的开销。对于一个非常小的任务,这个开销可能太高了。

解决方案 2。使用可以从目标语言执行代码的侦听器进程。它可以在本地套接字上侦听函数签名(也称为 add(2,2),在同一个套接字上执行并返回结果。侦听器还可以实现诸如进程/线程池之类的东西来有效地处理多个任务。

解决方案 3(感谢 AndrewS)。构建一个工作进程(连接到代理)。这意味着将 Celery worker 重写为目标语言。就开发工作而言,这是三者中最昂贵的版本。

【问题讨论】:

是否可以选择以目标语言构建工作进程(连接到代理)?您将使用代理将目标语言和 Python 解耦。 这是一种解决方案,但就成本效益而言不是理想的解决方案,因为它是三者中最昂贵的。我会将它添加到列表中。谢谢。 【参考方案1】:

我找到了解决办法。

这也是解决方案 2 的变体,使用 Thrift for RPC 和实际的作业代码。代码是用目标语言编写的,Thrift IDL 将其描述给可以生成客户端和服务器的 Thrift 编译器。客户端显然是 Python 代码,服务端是目标语言。

任何类似 Thrift 的替代品都可以,就像其他 RPC 代码生成器一样。

感谢所有的答案,我希望有一天这对某人有所帮助。

【讨论】:

【参考方案2】:

你可以使用 Celery HTTP 回调任务(Webhooks)

http://docs.celeryproject.org/en/latest/userguide/remote-tasks.html

【讨论】:

我认为这是解决方案 2 的一个特例。

以上是关于芹菜任务从另一种编程语言执行代码的主要内容,如果未能解决你的问题,请参考以下文章

芹菜任务不会在 django 中执行

Django实现异步定时任务

有没有办法非暴力地停止芹菜工人的特定任务?

在任务中获取芹菜节拍触发时间

gRPC 101:在Python中运行Go代码

如何检查处理 Celery 任务的队列