我想知道将设置从RQ工作者传递给任务函数的最佳方法是什么?
我希望将所有设置保留在应用程序之外的文本文件中,然后在工作人员启动时读取它,然后使用这些值来执行实际任务。
现在我正在使用os.environ。
谢谢!
答案 0 :(得分:0)
答案 1 :(得分:0)
它出现在documentation部分"自定义工作者类"这样做的方法是编写自定义工作类。这是我一直使用的模式,它将ConfigParser
文件中的一个部分加载到名为config
的虚拟python模块中:
import configparser
import rq.worker
import sys
import types
class ConfigurableWorker(rq.worker.Worker):
"""An RQ Worker class which loads configuration from config.ini"""
def work(self, *args, **kwargs):
"""Perform RQ work"""
# Store some configuration on a virtual module
sys.modules['config'] = types.ModuleType('config')
import config
config_reader = configparser.ConfigParser()
config_reader.read('config.ini')
for key, value in config_reader['rq'].items():
setattr(config, key, value)
# Do work
super().work(*args, **kwargs)
然后从工作职能:
def my_bunch_of_work():
import config
con = db_connection(url=config.my_db_connection)
使用--worker-class
参数可以使用客户工作类运行rq worker。
$ rq worker --worker-class my.prog.ConfigurableWorker
在ConfigurableWorker.work
方法中进行某种连接池设置可能会很不错,但我不确定其安全性,因为我不太了解RQ worker fork模型{{1} }
答案 2 :(得分:-1)
尝试使用os
模块。
#IN WORKER
import os
os.environ['TOKEN'] = 'xxx'
# IN JOB
#Open child processes via os.system(), popen() or fork() and execv()
someVariable = os.environ['TOKEN']