Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 进程join()是如何工作的?_Python_Process_Multiprocessing_Python Multiprocessing_Multiprocess - Fatal编程技术网

Python 进程join()是如何工作的?

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

我试图理解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
#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()命令之后。