芹菜任务从另一种编程语言执行代码
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 的一个特例。以上是关于芹菜任务从另一种编程语言执行代码的主要内容,如果未能解决你的问题,请参考以下文章