2024-03-29 01:38:19 发布
网友
我有一个Rails应用程序,可以安排工作。我想用Python编写我的worker程序。在两种不同语言之间共享作业队列的好机制是什么?我看到的所有队列(Sidekiq、Resque、Celery)似乎都是特定于语言的。在
用Ruby编写一个worker来派生另一个用python编写的进程(使用类似于Kernel#exec or Kernel#system)是个好主意吗?在
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"]}'
Resque是一个用于Redis的ruby客户端库。Redis是一个独立的队列,它作为一个单独的进程运行。它不是特定于语言的。在
您可以使用Resque(或任何其他rubyredis库)将作业添加到队列中,使用Python Redis库来提供在队列中工作的工人。在
或者,您可以在一个简单的不太高性能的解决方案中使用其他队列软件,甚至可以将您的作业放在postgres表中。在
关键是一方要将作业描述放在某种外部队列(Redis、postgres table、rabbitmq等)中。另一方将从外部队列中删除工作描述并实际执行它们。“作业描述”只是键/值,其中的值是字符串或字符串数组或其他任何东西。这就是Resque所发生的一切,尽管它可能会让它看起来更神奇的东西在起作用。在
您可能需要使用Redis(或者您选择的队列存储)来了解它的实际工作方式和正在发生的事情,并了解您用于与队列存储交互的库(例如Resque)实际在做什么(或者甚至直接针对没有客户机库的队列存储编写一点代码)来生成一定要知道发生了什么,并且可以适当地设置它,并在需要时进行调试
最终,Resque队列只是一个Redis键值映射,它以特定格式接收JSON(“class”和“args”的散列)。这意味着您可以从Python Redis客户端或直接从命令行将内容推送到Resque队列中:
相关问题 更多 >
编程相关推荐