这是文件结构:
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。
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_MAP
和QUEUE_MAP
保存在others/constants.py
内。然后,我希望能够同时在analysis_tools/analysis_tools.py
和rabbit_wrappers/rabbit_wrapper.py
问题是当我将两个MAP
保留为常量时,由于找不到“运行器”,因此会引发错误,并且我不想/可能不应该实例化AnalysisTools的对象在我的constants.py
文件中。
所以基本上有两个问题。
问题1。如何在外部保存function_map并调用它?
我可以像这样runner.FUNCTION_MAP["func1"]()
第二季度。一般如何导入常量?
此from others.constants import *
不起作用。
答案 0 :(得分:0)
您要创建循环依赖关系。您希望analysis_tools.py依赖analysis_tools.py上的constants.py和constants.py。
拥有一个名为常量的文件通常不是一个好主意。事物应该生活在它们在功能上所属的地方,而不是根据类型。出于相同的原因,您没有文件调用classes.py,functions.py,variables.py。
FUNCTION_MAP与AnalysisTools显然相关,只需将其放在同一文件中即可。
回复:Q2,通常只需要导入每个模块中需要的内容。如果没有循环依赖项,那么这样做应该没有问题。