我正在开始一个过程:
for i in range(1, processes + 1):
hup = MyURLParser() //A class I made
p = Process(target = hup.run)
p.start()
之后,以便主线程不会立即退出:
while (True):
print("Main sleeping...")
sleep(20)
如何检查每个子进程是否仍然从主线程运行,而不是这样做?然后,我没有无限循环,而是可以在正确的时间突破循环并做其他事情....
答案 0 :(得分:3)
将所有流程添加到列表中,并依次为join()
每个流程添加:
processes = []
for i in range(1, processes + 1):
hup = MyURLParser() //A class I made
p = Process(target = hup.run)
p.start()
processes.append(p)
for p in processes:
p.join()
join()
调用阻塞,直到该过程完成。你称之为顺序无关紧要;在已完成的流程上调用join()
将立即返回。
您可能还想查看multiprocessing
module中的其他功能;特别是Pool
类可以帮助您简化此代码。
答案 1 :(得分:2)
p.is_alive()
告诉您进程是否正在运行。
要等到它结束,请使用p.join()
。
答案 2 :(得分:1)
您可以使用join
方法(在docs中阅读更多内容):
首先,保留您创建的Process
个对象:
your_processes = []
...
p.start()
your_processes.append(p)
启动所有进程后,使用join
等待每个进程完成执行。
for p in your_processes:
p.join()
... #the rest of your code
基本上join
使主进程等待进程p完成,然后才进入下一行代码。
答案 3 :(得分:1)
你可以这样做:
P = []
for i in range(1, processes + 1):
hup = MyURLParser() //A class I made
p = Process(target = hup.run)
p.start()
P.append(p)
for p in P:
p.join()
要仅检查进程是否处于活动状态,请使用.is_alive()
在此处阅读更多内容:https://docs.python.org/3/library/multiprocessing.html