我试图学习多重处理,并创建了一个示例,但它的行为出乎意料。 父进程运行,然后创建子进程,但在子进程完成之前,资源不会返回到父进程
代码:
from multiprocessing import Process
import time
def f():
newTime = time.time() + 7
while(time.time() < newTime):
print("inside child process")
time.sleep(int(5))
if __name__ == '__main__':
bln = True
while(True):
newTime = time.time() + 4
while(time.time() < newTime):
print("printing fillers")
if(bln):
p = Process(target=f)
p.start()
p.join()
bln = False
结果
“内部子进程”
(等待5秒)
“内部子进程”
“印刷填料”
“印刷填料”
[……]
如果我删除“p.join()”,那么它就会工作。但根据我的理解,p.join()是告诉程序在结束程序之前等待该线程/进程完成。 有人能告诉我为什么会这样吗
p.join()不是用于结束程序,而是用于等待子进程完成。如果需要结束程序,请使用sys.exit(0)或raise SystemExit(“此处的原因”)之类的命令
不,它会立即阻塞主线程,直到线程/进程完成。通过在流程启动后立即执行此操作,在每个流程完成之前不会让循环继续
最好将您创建的所有
Process
对象收集到一个列表中,以便在循环创建它们之后可以访问它们。然后在一个新的循环中,等待它们在创建并启动之后只完成如果您希望能够同时(在等待
join
时)完成一些事情,那么最常见的方法是使用另一个线程或进程。您也可以通过给join
一个超时值来选择只等待一小段时间,如果进程没有在这段时间内完成,将抛出一个异常,您可以使用try
块捕获该异常,并决定在再次尝试join
之前执行其他操作相关问题 更多 >
编程相关推荐