Python 进程join()是如何工作的?
我试图理解Python中的多处理,我编写了以下程序:Python 进程join()是如何工作的?,python,process,multiprocessing,python-multiprocessing,multiprocess,Python,Process,Multiprocessing,Python Multiprocessing,Multiprocess,我试图理解Python中的多处理,我编写了以下程序: from multiprocessing import Process numOfLoops = 10 #function for each process def func(): a = float(0.0) for i in xrange(0, numOfLoops): a += 0.5 print a processes = [] numOfProcesses = 2 #creat
from multiprocessing import Process
numOfLoops = 10
#function for each process
def func():
a = float(0.0)
for i in xrange(0, numOfLoops):
a += 0.5
print a
processes = []
numOfProcesses = 2
#create the processes
for i in xrange(0, numOfProcesses):
processes.append(Process(target=func))
for process in processes:
process.start() #Start the processes
for process in processes:
process.join() #wait for each process to terminate
print "shouldn't this statement be printed at the end??"
我创建了两个执行函数func()的进程。我使用join()方法等待每个进程终止,然后再继续程序。这难道不意味着最后一个print语句应该在两个进程执行其功能后的程序末尾打印出来吗?
但我的产出是:
shouldn't this statement be printed at the end??
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
这不是我所期望的。你能解释一下发生了什么吗?这很简单,它只需等待每个正在运行的进程完成,当发生这种情况时,它就会返回 之所以称为
join
,是因为它将进程连接到单个进程中。
如果导入sys,并在最终打印之前放置sys.stdout.flush(),会发生什么情况?@DavisYoshida,如果我使用flush(),则输出与预期一致。我仍然不明白发生了什么。如果我理解正确,输出正在被缓冲,但进程正在按照我期望的顺序执行函数。这是正确的。如果您有需要在其他进程完成后执行的代码,可以将其放在join()命令之后。