我想用一个ruby脚本将工作提交到faktory服务器上(https:/github.comcontribsysfaktorywiki。)来启动一个python worker。Faktory应该可以完美地实现这一点,因为它的语言不可知,但是文档中只涵盖了ruby(job和worker)或者python(job和worker)的情况。简单来说,我有两个问题。
这里有一个最小(不是)的工作示例。首先是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)
.
再来谈谈这两个问题。
目前我需要把python Worker注册为'ActiveJob::QueueAdapters::FaktoryAdapter::JobWrapper'。
也许有用的是一个最小的ruby作业和python worker的例子,类似于ruby的例子(https:/github.comcontribsysfaktorywikiGetting-Started-Ruby。)或python(https:/www.mikeperham.com20190108using-faktory-with-python)而已。
你的Ruby代码根本不需要任何工作。工作就是Python。Ruby代码只需要创建作业记录并发送给Faktory,这样python Worker就可以接收它。在Ruby中,你可以使用普通的Faktory::Client API来创建一个基本的工作。
c = Faktory::Client.new
c.push('jobtype' => 'PythonWorker', 'args' => [1], 'queue' => 'default')
启动Faktory,启动一个faktory_worker_python进程,然后在你的Ruby应用程序中运行这些代码。