我有4个文件->main.py、process1.py、process2.py、process3.py。我想使用多处理来运行(循环(所有进程。但当我执行代码时,只有一个进程有效。
代码main.py:
from multiprocessing import Process
import process1, process2, process3
if __name__ == "__main__":
p1 = Process(target=process1)
p2 = Process(target=process2)
p3 = Process(target=process3)
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
代码处理1.py:
while True:
print("I'm process 1")
其他过程与过程1类似。
输出:
I'm process 1
I'm process 1
I'm process 1
I'm process 1
...
解决方案
emsp;将process1.py、process2.py和process3.py转换为函数
main.py应该是:
from multiprocessing import Process
from process1 import process1
from process2 import process2
from process3 import process3
if __name__ == "__main__":
p1 = Process(target=process1)
p2 = Process(target=process2)
p3 = Process(target=process3)
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
和process1.py应该是:
def process1():
while True:
print("I'm process 1")
其他的(进程2和进程3(也应该变成的功能
解释
emsp;现在我已经意识到正在发生什么
导入.py文件时,python执行它,所以当你第一次
import process1, process2, process3
python开始执行第一个进程,因此您的输出不是来自的第7行
p1.start()
但从2号线进口因此,将它们转换为函数使得反导入只定义进程1,而不是执行它
我不确定,但我认为你想做的可以通过线程模块,但要做到这一点,您需要启动进程转换为如下函数(例如,process1.py(:
def process1():
while True:
print("I'm process 1")
在主代码中,您可以使用线程模块为每个进程创建一个线程:
from threading import Thread
from process1 import process1
from process2 import process2
from process3 import process3
if __name__ == "main":
p1 = Thread(target=process1)
p2 = Thread(target=process2)
p3 = Thread(target=process3)
p1.start()
p2.start()
p3.start()
如果你有任何需要参数的过程,你可以通过以下方式发送:
p1 = Thread(target=process1, args=(argument1, ))