4

我想知道将设置从 RQ 工作人员传递到任务功能的最佳方法是什么?

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

现在我正在使用 os.environ。

谢谢!

4

3 回答 3

1

从“自定义工作者类”部分的文档中可以看出,这样做的方法是编写一个自定义工作者类。这是我一直在使用的一种模式,它将ConfigParser文件中的一个部分加载到名为的虚拟 python 模块中config

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)

可以使用参数来运行带有客户工作人员类的 rq 工作人员--worker-class

$ rq worker --worker-class my.prog.ConfigurableWorker

在该方法中进行某种连接池设置可能会很好ConfigurableWorker.work,但我不确定它的安全性,但我不太了解 RQ worker fork 模型os.fork()

于 2018-05-30T05:17:16.497 回答
0

尝试使用该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']
于 2015-02-02T06:51:30.943 回答
0

假设您正在学习 python-rq,您可能想在此处阅读此页面并此处阅读配置文件。

于 2012-10-25T12:12:02.217 回答