我有三个模块,worker
,master
和MainTests
。我正在运行MainTests
模块作为主脚本。在MainTests
中,我调用master.run()
,其中我需要生成多个worker
进程。这可能吗?在我遇到的所有python multiprocessing
教程中,进程都在主模块中启动。如果这是可能的,有人可以举例说明这可能是什么样的吗?
这是我到目前为止所尝试的:
Worker.py
import time
class Worker(object):
def __init__(self):
super(Worker, self).__init__()
def run(self):
time.sleep(5)
print("worker done with run")
return
Master.py:
import multiprocessing
class Master(object):
def __init__(self, workers_array):
super(Master, self).__init__()
self.workers_array = workers_array
def run(self):
process_arr = [multiprocessing.Process(worker.run()) for worker in self.workers_array]
[worker_process.start() for worker_process in process_arr]
MainTests.py
from Worker import *
from Master import *
workers_array = [Worker() for i in range(5)]
master = Master(workers_array)
master.run()
出现两个问题:
提前感谢您的帮助。
答案 0 :(得分:0)
我不确定您是否仍在锁定答案,但是您只需要在以下if语句中放入 main 程序的“入口点”即可:
if __name__ == "__main__":
main()
这样,您可以在导入的模块中启动进程。 有关更多信息,请查看this bit of the docs以及其中的其他内容:)
在您的示例中为:
from Worker import *
from Master import *
if __name__ == __main__:
workers_array = [Worker() for i in range(5)]
master = Master(workers_array)
master.run()
这对我有用。 希望我能帮上忙。