有这样一个需求:
- 我有多个脚本,但是我需要将这些脚本打包成进程去运行,但是我不能知道每个Module中的类是什么,这时候该如何去获取每个Module当中的类对象以便于启动这样一个脚本。
模拟问题:
- 我有三个py文件,里边各自对应有一个类,我需要将这些类run起来
"""Module1.py"""
class A:
def run(self):
do something
"""Module2.py"""
class B:
def run(self):
do something
"""Module3.py"""
class C:
def run(self):
do something
以上是我需要去run的三个程序。首先,我是不能确定我有几个Module的,然后,我也不知道每个Module当中有哪些类(或者说类名是什么),但是有一点是我明白的,每一个类的执行主逻辑都写在了run()当中,我的目的就是去启动run()
处理问题
以上问题提出,也同时模拟了情景。以下是我的解决方式。
- 编写配置文件,因为我在自动处理时不能知道有哪些Module,有哪些class,所以必须编写一个config文件来管理
"""config_.py"""
task_manager = [
{
"class_flag": "A",
"filename" : "Module1",
"classname": "A",
},
{
"class_flag": "B",
"filename" : "Module2",
"classname": "B",
},
{
"class_flag": "C",
"filename" : "Module3",
"classname": "C",
}
]
- 建立一个主程序
"""StartProcesses.py"""
# coding=utf-8
import importlib
import multiprocessing
from config_ import task_manager
Processes = []
for task in task_manager:
module = importlib.import_module(task["filename"])
cls = getattr(module, task["classname"])
Processes.append(multiprocessing.Process(target=cls().run))
[Process.start() for Process in Processes]
[Process.join() for Process in Processes]
暂且写这些,往后有空再改进一下,以上每个类、方法、内置函数都比较基础还需自行了解