我有一个 Rails 应用程序,可以安排作业。我想用 Python 编写我的工作程序。在两种不同语言之间共享作业队列的好机制是什么?我查看的所有队列(Sidekiq、Resque、Celery)似乎都是特定于语言的。
用 Ruby 编写一个工作进程,只派生另一个用 python 编写的进程(使用类似 Kernel#exec or Kernel#system 的东西)是个好主意吗?
最佳答案
Resque 是 Redis 的 ruby 客户端库。 Redis 是一个独立的队列,它作为单独的进程运行。它不是特定于语言的。
您可以使用 Resque(或任何其他 ruby Redis 库)将作业添加到队列中,并使用 Python redis 库来提供在队列外工作的工作人员。
或者您可以使用其他一些队列软件——在一个简单的、性能不是很高的解决方案中,您甚至可以将作业保留在 postgres 表中。
关键是一方会将作业的描述放入某种外部队列(Redis、postgres 表、rabbitmq 等)。另一方将从外部队列中取出工作描述并实际执行它们。 “工作描述”只是键/值,其中值是字符串或字符串数组或其他任何内容。无论如何,这就是 Resque 所发生的情况,尽管它可能会让它看起来像是有更神奇的东西正在发挥作用。
您可能希望使用 Redis(或您选择的队列存储)来了解它的实际工作原理和发生的情况,并了解您用来与队列存储交互的库(例如 Resque)实际上正在做(或者甚至在没有客户端库的情况下直接针对队列存储编写一些代码)以确保您了解正在发生的事情并且可以适本地设置它并在需要时进行调试
关于python - 如何在 Ruby 和 Python 应用程序之间共享后台作业队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28298658/