python根据类的字符串名获取对象以启动类

有这样一个需求:
  • 我有多个脚本,但是我需要将这些脚本打包成进程去运行,但是我不能知道每个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]

暂且写这些,往后有空再改进一下,以上每个类、方法、内置函数都比较基础还需自行了解

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值