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

时间:2015-02-03 12:14:10

标签: python ruby queue

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

在Ruby中编写一个工作者是一个好主意,它只是用python写的另一个进程(使用像Kernel#exec or Kernel#system这样的东西)?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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

关键是一方将把一份工作的描述放到某种外部队列上(Redis,postgres table,rabbitmq,还有其他东西)。而另一方将从外部队列中取出作业描述并实际执行它们。工作说明'只是键/值,其中值是字符串或字符串数​​组或其他。这就是Resque无论如何都会发生的事情,尽管它可能会使它看起来像是一些更神奇的东西。

您可能希望与Redis(或您选择的队列存储区)合作,以了解它的实际工作方式和发生的情况,并了解您用于与队列存储库交互的库(例如Resque)实际上是在没有客户端库的情况下直接针对队列存储执行(甚至直接编写一些代码),以确保您了解正在进行的操作并且可以正确设置并在需要时进行调试