如何将 Faktory 用于 ruby 工作和 python 工人?
How to use Faktory with a ruby job and a python worker?
我想使用 ruby 脚本将作业提交到 faktory 服务器 (https://github.com/contribsys/faktory/wiki) 以启动 python worker。
Faktory 应该是完美的,因为它与语言无关,但文档仅涵盖 ruby(工作和工人)或 python(工作和工人)案例。很快,我有两个问题:
- 如何在 python 端注册 worker 以便它可以从 ruby 端寻址?
- 如何正确编码 ruby 作业(特别是,是否需要 perform 方法)?
这是一个最小的(不是)工作示例。
首先,python worker 文件:
from faktory import Worker
import logging
logging.basicConfig(level=logging.INFO)
def python_worker(var_int):
print(var_int)
w = Worker(queues=['default'], concurrency=1)
w.register('PythonWorker', python_worker)
w.run()
现在 ruby 文件:
class RubyJob < ApplicationJob
include Faktory::Job
faktory_options retry: 5
queue_as :default
end
调用我使用的作业 RubyJob.perform_later(1)
。
回到两个问题:
- ruby 作业是否需要 'perform()' 方法?
- 我如何告诉 ruby 作业要求工厂提供 'PythonWorker'?
目前我需要将 python 工人注册为 'ActiveJob::QueueAdapters::FaktoryAdapter::JobWrapper'。
可能有用的是 ruby 工作和 python 工人的最小示例,类似于仅 ruby (https://github.com/contribsys/faktory/wiki/Getting-Started-Ruby) or python (https://www.mikeperham.com/2019/01/08/using-faktory-with-python/) 的示例。
您的 Ruby 代码根本不需要任何作业。工作是Python。 Ruby 代码只需要创建作业记录并将其发送到 Faktory,以便 python 工人可以提取它。在 Ruby 中,您使用普通的旧 Faktory::Client API:
创建了一个基本作业
c = Faktory::Client.new
c.push('jobtype' => 'PythonWorker', 'args' => [1], 'queue' => 'default')
启动 Faktory,启动 faktory_worker_python 进程,然后 运行 在您的 Ruby 应用程序中编写该代码。
我想使用 ruby 脚本将作业提交到 faktory 服务器 (https://github.com/contribsys/faktory/wiki) 以启动 python worker。 Faktory 应该是完美的,因为它与语言无关,但文档仅涵盖 ruby(工作和工人)或 python(工作和工人)案例。很快,我有两个问题:
- 如何在 python 端注册 worker 以便它可以从 ruby 端寻址?
- 如何正确编码 ruby 作业(特别是,是否需要 perform 方法)?
这是一个最小的(不是)工作示例。 首先,python worker 文件:
from faktory import Worker
import logging
logging.basicConfig(level=logging.INFO)
def python_worker(var_int):
print(var_int)
w = Worker(queues=['default'], concurrency=1)
w.register('PythonWorker', python_worker)
w.run()
现在 ruby 文件:
class RubyJob < ApplicationJob
include Faktory::Job
faktory_options retry: 5
queue_as :default
end
调用我使用的作业 RubyJob.perform_later(1)
。
回到两个问题:
- ruby 作业是否需要 'perform()' 方法?
- 我如何告诉 ruby 作业要求工厂提供 'PythonWorker'?
目前我需要将 python 工人注册为 'ActiveJob::QueueAdapters::FaktoryAdapter::JobWrapper'。
可能有用的是 ruby 工作和 python 工人的最小示例,类似于仅 ruby (https://github.com/contribsys/faktory/wiki/Getting-Started-Ruby) or python (https://www.mikeperham.com/2019/01/08/using-faktory-with-python/) 的示例。
您的 Ruby 代码根本不需要任何作业。工作是Python。 Ruby 代码只需要创建作业记录并将其发送到 Faktory,以便 python 工人可以提取它。在 Ruby 中,您使用普通的旧 Faktory::Client API:
创建了一个基本作业c = Faktory::Client.new
c.push('jobtype' => 'PythonWorker', 'args' => [1], 'queue' => 'default')
启动 Faktory,启动 faktory_worker_python 进程,然后 运行 在您的 Ruby 应用程序中编写该代码。