有這樣一個需求:
- 我有多個腳本,但是我需要将這些腳本打包成程序去運作,但是我不能知道每個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]
暫且寫這些,往後有空再改進一下,以上每個類、方法、内置函數都比較基礎還需自行了解