从外部文件导入常量(函数名称)

时间:2019-11-14 16:55:41

标签: python dictionary rabbitmq constants

这是文件结构:

root_dir/
├── analysis_tools
│   ├── analysis_tools.py
├── others
│   ├── constants.py
├── rabbit_wrappers
│   ├── rabbit_wrapper.py
└── utils

我正在使用RabbitMq实现工作流程。这是简短的伪代码:  1.任务添加到RabbitMQ队列  2. Autoscaler启动基于队列的虚拟机  3.虚拟机打开并从队列中消费

每个队列只有一种机器。因此,如果queue1中有一条消息,我需要运行func1。如果是queue2,则需要运行func2。

func [n]从队列[n]中消耗

from analysis_tools.analysis_tools import AnalysisTools

runner = AnalysisTools()

FUNCTION_MAP = {
    'func1' : runner.func1,
    'func2' : runner.func2
}
QUEUE_MAP = {
    'func1' : "queue1",
    'func2' : "queue2"
}

我有一个function_map和一个queue_map。我通过命令行参数传递了要运行的函数(func1 / func2)。根据其运行的功能,它会自动附加和使用相关队列。

我想做的是将FUNCTION_MAPQUEUE_MAP保存在others/constants.py内。然后,我希望能够同时在analysis_tools/analysis_tools.pyrabbit_wrappers/rabbit_wrapper.py

中调用thees函数

问题是当我将两个MAP保留为常量时,由于找不到“运行器”,因此会引发错误,并且我不想/可能不应该实例化AnalysisTools的对象在我的constants.py文件中。

所以基本上有两个问题。

问题1。如何在外部保存function_map并调用它?

我可以像这样runner.FUNCTION_MAP["func1"]()

从调用函数的地方调用运行程序

第二季度。一般如何导入常量?

from others.constants import *不起作用。

1 个答案:

答案 0 :(得分:0)

您要创建循环依赖关系。您希望analysis_tools.py依赖analysis_tools.py上的constants.py和constants.py。

拥有一个名为常量的文件通常不是一个好主意。事物应该生活在它们在功能上所属的地方,而不是根据类型。出于相同的原因,您没有文件调用classes.py,functions.py,variables.py。

FUNCTION_MAP与AnalysisTools显然相关,只需将其放在同一文件中即可。

回复:Q2,通常只需要导入每个模块中需要的内容。如果没有循环依赖项,那么这样做应该没有问题。