如何通过使用多个文件在Python中正确使用多处理



我有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, ))

相关内容

  • 没有找到相关文章

最新更新