如何在Ruby和Python应用程序之间共享后台作业队列

2024-03-29 01:38:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Rails应用程序,可以安排工作。我想用Python编写我的worker程序。在两种不同语言之间共享作业队列的好机制是什么?我看到的所有队列(Sidekiq、Resque、Celery)似乎都是特定于语言的。在

用Ruby编写一个worker来派生另一个用python编写的进程(使用类似于Kernel#exec or Kernel#system)是个好主意吗?在


Tags: 程序语言应用程序队列进程作业kernel机制
2条回答

Resque是一个用于Redis的ruby客户端库。Redis是一个独立的队列,它作为一个单独的进程运行。它不是特定于语言的。在

您可以使用Resque(或任何其他rubyredis库)将作业添加到队列中,使用Python Redis库来提供在队列中工作的工人。在

或者,您可以在一个简单的不太高性能的解决方案中使用其他队列软件,甚至可以将您的作业放在postgres表中。在

关键是一方要将作业描述放在某种外部队列(Redis、postgres table、rabbitmq等)中。另一方将从外部队列中删除工作描述并实际执行它们。“作业描述”只是键/值,其中的值是字符串或字符串数组或其他任何东西。这就是Resque所发生的一切,尽管它可能会让它看起来更神奇的东西在起作用。在

您可能需要使用Redis(或者您选择的队列存储)来了解它的实际工作方式和正在发生的事情,并了解您用于与队列存储交互的库(例如Resque)实际在做什么(或者甚至直接针对没有客户机库的队列存储编写一点代码)来生成一定要知道发生了什么,并且可以适当地设置它,并在需要时进行调试

最终,Resque队列只是一个Redis键值映射,它以特定格式接收JSON(“class”和“args”的散列)。这意味着您可以从Python Redis客户端或直接从命令行将内容推送到Resque队列中:

redis-cli rpush "resque:queue:myqueue" '{"class":"MyClass","args":["arg1"]}'

相关问题 更多 >