如何将设置传递给rq任务?

时间:2012-10-25 11:56:58

标签: python

我想知道将设置从RQ工作者传递给任务函数的最佳方法是什么?

我希望将所有设置保留在应用程序之外的文本文件中,然后在工作人员启动时读取它,然后使用这些值来执行实际任务。

现在我正在使用os.environ。

谢谢!

3 个答案:

答案 0 :(得分:0)

假设您正在使用python-rq,您可能需要阅读此页面here和配置文件here

答案 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']