<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Python%E5%A4%9A%E8%BF%9B%E7%A8%8B%28multiprocessing%EF%BC%89</id>
	<title>Python多进程(multiprocessing） - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Python%E5%A4%9A%E8%BF%9B%E7%A8%8B%28multiprocessing%EF%BC%89"/>
	<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Python%E5%A4%9A%E8%BF%9B%E7%A8%8B(multiprocessing%EF%BC%89&amp;action=history"/>
	<updated>2026-04-19T12:10:33Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.linuxsa.org/index.php?title=Python%E5%A4%9A%E8%BF%9B%E7%A8%8B(multiprocessing%EF%BC%89&amp;diff=875&amp;oldid=prev</id>
		<title>Evan：​/* pre */</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Python%E5%A4%9A%E8%BF%9B%E7%A8%8B(multiprocessing%EF%BC%89&amp;diff=875&amp;oldid=prev"/>
		<updated>2024-11-07T02:47:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;pre&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== pre ==&lt;br /&gt;
＃2024&lt;br /&gt;
 github/python/devops&lt;br /&gt;
&lt;br /&gt;
Unix/Linux操作系统提供了一个fork()系统调用，它非常特殊。普通的函数调用，调用一次，返回一次，但是fork()调用一次，返回两次，因为操作系统自动把当前进程（称为父进程）复制了一份（称为子进程），然后，分别在父进程和子进程内返回。&lt;br /&gt;
&lt;br /&gt;
子进程永远返回0，而父进程返回子进程的ID。这样做的理由是，一个父进程可以fork出很多子进程，所以，父进程要记下每个子进程的ID，而子进程只需要调用getppid()就可以拿到父进程的ID。&lt;br /&gt;
&lt;br /&gt;
Python的os模块封装了常见的系统调用，其中就包括fork，可以在Python程序中轻松创建子进程：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; evan@evanpc:~/pytest$ cat mu.py&amp;amp;nbsp;&amp;lt;br/&amp;gt; #!/usr/bin/python&amp;lt;br/&amp;gt; import os&amp;lt;br/&amp;gt; print &amp;#039;Process (%s) start...&amp;#039;&amp;amp;nbsp;%os.getpid()&amp;amp;nbsp;&amp;lt;br/&amp;gt; pid = os.fork()&amp;lt;br/&amp;gt; if pid==0:&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;I am child process (%s) and my parent is&amp;amp;nbsp;%s.&amp;#039;&amp;amp;nbsp;% (os.getpid(), os.getppid())&amp;lt;br/&amp;gt; else:&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;I (%s) just created a child process (%s).&amp;#039;&amp;amp;nbsp;%(os.getpid(),pid)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
evan@evanpc:~/pytest$ python &amp;amp;nbsp;mu.py&amp;lt;br/&amp;gt; Process (7725) start...&amp;lt;br/&amp;gt; I (7725) just created a child process (7726).&amp;lt;br/&amp;gt; I am child process (7726) and my parent is 7725.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== multiprocessing ==&lt;br /&gt;
&lt;br /&gt;
multiprocessing是要比fork更高级的库了，使用multiprocessing可以更加轻松的实现多进程程序。multiprocessing也提供了很多进程同步和进程通信的方法。&lt;br /&gt;
&lt;br /&gt;
由于Python是跨平台的，自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块。&lt;br /&gt;
&lt;br /&gt;
multiprocessing模块提供了一个Process类来代表一个进程对象，下面的例子演示了启动一个子进程并等待其结束：&lt;br /&gt;
&lt;br /&gt;
evan@evanpc:~/pytest$ cat multi.py&amp;amp;nbsp;&amp;lt;br/&amp;gt; #!/usr/bin/python&amp;lt;br/&amp;gt; from multiprocessing import Process&amp;lt;br/&amp;gt; import os&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
def run_proc(name):&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;Run child process&amp;amp;nbsp;%s (%s)...&amp;#039;&amp;amp;nbsp;%(name, os.getpid())&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;Parent process&amp;amp;nbsp;%s.&amp;#039;&amp;amp;nbsp;% os.getpid()&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; p = Process(target=run_proc,args=(&amp;#039;test&amp;#039;,))&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;Process will start.&amp;#039;&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; p.start()&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; p.join()&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;Process end.&amp;#039;&amp;lt;br/&amp;gt; evan@evanpc:~/pytest$ python multi.py&amp;amp;nbsp;&amp;lt;br/&amp;gt; Parent process 7572.&amp;lt;br/&amp;gt; Process will start.&amp;lt;br/&amp;gt; Run child process test (7573)...&amp;lt;br/&amp;gt; Process end.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/env python&lt;br /&gt;
import multiprocessing&lt;br /&gt;
import time&lt;br /&gt;
def clock(interval):&lt;br /&gt;
        while True:&lt;br /&gt;
                print &amp;quot;The time is {0}&amp;quot;.format(time.ctime())&lt;br /&gt;
                time.sleep(interval)&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
        for i in range(3):&lt;br /&gt;
                p = multiprocessing.Process(target=clock,args=(1,))&lt;br /&gt;
                p.start()&lt;br /&gt;
                p.join()&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 join()代表启动多进程，但是阻塞并发运行，一个进程执行结束后再执行第二个进程。可以给其设置一个timeout值比如join(5)代表5秒后无论当前进程是否结果都继续并发执行第二个进程&lt;br /&gt;
&lt;br /&gt;
程序运行结果&lt;br /&gt;
The time is Mon Dec 19 17:25:14 2016&lt;br /&gt;
The time is Mon Dec 19 17:25:15 2016&lt;br /&gt;
The time is Mon Dec 19 17:25:16 2016&lt;br /&gt;
省略&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
二:进程同步 对于一些互斥的资源来说，进程间需要进程互斥来访问。否则导致资源访问受阻，或者最后的结果混乱等情况。对于标准输出这个资源来说，如果多个资源同属输出信息，可能会导致输出的信息混乱。所以需要使用锁来避免资源互斥访问。&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/python&lt;br /&gt;
#-*-  codign:utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from multiprocessing import Process, Lock&lt;br /&gt;
def f(l,i):&lt;br /&gt;
    l.acquire()&lt;br /&gt;
    print &amp;quot;hellow world&amp;quot;, i&lt;br /&gt;
    l.release()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    lock = Lock()&lt;br /&gt;
    for num in range(10):&lt;br /&gt;
        Process(target=f, args=(lock,num)).start()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
程序运行结果&lt;br /&gt;
hellow world 0&lt;br /&gt;
hellow world 5&lt;br /&gt;
hellow world 1&lt;br /&gt;
hellow world 4&lt;br /&gt;
hellow world 3&lt;br /&gt;
hellow world 9&lt;br /&gt;
hellow world 7&lt;br /&gt;
hellow world 8&lt;br /&gt;
hellow world 6&lt;br /&gt;
hellow world 2&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 进程共享变量 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; 几个进程之间的都拥有自己独立的命名空间和地址空间，无法通过一些全局变量来实现，multiprocessing提供了一些特殊的函数来实现共享变量。&amp;lt;br/&amp;gt; 1.Value,Array的方式&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/python&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
from multiprocessing import  Process, Value,Array&lt;br /&gt;
def f(n,a):&lt;br /&gt;
    n.value=3.1415926&lt;br /&gt;
    for i in range(len(a)):&lt;br /&gt;
        a[i]=-a[i]&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    num =Value(&amp;#039;d&amp;#039;,0.0)&lt;br /&gt;
    arr = Array(&amp;#039;i&amp;#039;,range(10))&lt;br /&gt;
    p=Process(target=f,args=(num,arr))&lt;br /&gt;
    p.start()&lt;br /&gt;
    p.join()&lt;br /&gt;
    print num.value&lt;br /&gt;
    print arr[:]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
join()代表启动多进程&lt;br /&gt;
启动子进程p p.start()&lt;br /&gt;
&lt;br /&gt;
Value()和Array()都有两个参数第一个参数代表存放的值的类型，第二个参数代表其值。&lt;br /&gt;
运行结果&lt;br /&gt;
&lt;br /&gt;
3.1415926&lt;br /&gt;
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
2.Manager的方式&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; 这个方式支持的类型更多，灵活性更大，但是速度要慢于Value,Array。&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/python&lt;br /&gt;
#-*-  codign:utf-8 -*-&lt;br /&gt;
from multiprocessing import Process,Manager&lt;br /&gt;
def f(d,l):&lt;br /&gt;
    d[1]=&amp;#039;1&amp;#039;&lt;br /&gt;
    d[&amp;#039;2&amp;#039;]=2&lt;br /&gt;
    d[0.25]=None&lt;br /&gt;
    l.reverse()&lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
    manager = Manager()&lt;br /&gt;
    d=manager.dict()&lt;br /&gt;
    l=manager.list(range(10))&lt;br /&gt;
    p=Process(target=f,args=(d,l))&lt;br /&gt;
    p.start()&lt;br /&gt;
    p.join()&lt;br /&gt;
    print d&lt;br /&gt;
    print l&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
运动结果&lt;br /&gt;
{0.25: None, 1: &amp;#039;1&amp;#039;, &amp;#039;2&amp;#039;: 2}&lt;br /&gt;
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pool ==&lt;br /&gt;
&lt;br /&gt;
如果要启动大量的子进程，可以用进程池的方式批量创建子进程：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; #!/usr/bin/python&amp;lt;br/&amp;gt; #-*- coding: utf-8 -*-&amp;lt;br/&amp;gt; from multiprocessing import Pool&amp;amp;nbsp;&amp;lt;br/&amp;gt; import os, time, random&lt;br /&gt;
&lt;br /&gt;
def long_time_task(name):&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;Run task&amp;amp;nbsp;%s (%s)...&amp;#039;&amp;amp;nbsp;% (name, os.getpid())&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; start = time.time()&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; time.sleep(random.random() * 3)&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; end = time.time()&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;Task&amp;amp;nbsp;%s runs&amp;amp;nbsp;%0.2f seconds.&amp;#039;&amp;amp;nbsp;% (name, (end - start))&lt;br /&gt;
&lt;br /&gt;
if __name__==&amp;#039;__main__&amp;#039;:&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;Parent process&amp;amp;nbsp;%s.&amp;#039;&amp;amp;nbsp;% os.getpid()&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; p = Pool()&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; for i in range(5):&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; p.apply_async(long_time_task, args=(i,))&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;Waiting for all subprocesses done...&amp;#039;&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; p.close()&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; p.join()&amp;lt;br/&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; print &amp;#039;All subprocesses done.&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;#039;&amp;#039;&amp;#039;运行结果&amp;lt;br/&amp;gt; evan@evanpc:~/dkm/python/test$ python pool.py&amp;amp;nbsp;&amp;lt;br/&amp;gt; Parent process 23349.&amp;lt;br/&amp;gt; Waiting for all subprocesses done...&amp;lt;br/&amp;gt; Run task 0 (23350)...&amp;lt;br/&amp;gt; Run task 1 (23351)...&amp;lt;br/&amp;gt; Run task 2 (23352)...&amp;lt;br/&amp;gt; Run task 3 (23353)...&amp;lt;br/&amp;gt; Task 3 runs 1.04 seconds.&amp;lt;br/&amp;gt; Run task 4 (23353)...&amp;lt;br/&amp;gt; Task 4 runs 0.05 seconds.&amp;lt;br/&amp;gt; Task 2 runs 1.37 seconds.&amp;lt;br/&amp;gt; Task 0 runs 1.80 seconds.&amp;lt;br/&amp;gt; Task 1 runs 2.92 seconds.&amp;lt;br/&amp;gt; All subprocesses done.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; 代码解读：&lt;br /&gt;
&lt;br /&gt;
对Pool对象调用join()方法会等待所有子进程执行完毕，调用join()之前必须先调用close()，调用close()之后就不能继续添加新的Process了。&lt;br /&gt;
&lt;br /&gt;
请注意输出的结果，task 0，1，2，3是立刻执行的，而task 4要等待前面某个task完成后才执行，这是因为Pool的默认大小在我的电脑上是4，因此，最多同时执行4个进程。这是Pool有意设计的限制，并不是操作系统的限制。如果改成：&lt;br /&gt;
&lt;br /&gt;
p = Pool(5)&amp;lt;br/&amp;gt; 就可以同时跑5个进程。&lt;br /&gt;
&lt;br /&gt;
由于Pool的默认大小是CPU的核数，如果你不幸拥有8核CPU，你要提交至少9个子进程才能看到上面的等待效果。&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/python&lt;br /&gt;
#-*-  coding:utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from multiprocessing import  Pool&lt;br /&gt;
def f(x):&lt;br /&gt;
    return x*x&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    pool = Pool(processes=5)&lt;br /&gt;
    result = pool.apply_async(f,[10])&lt;br /&gt;
    print result&lt;br /&gt;
    print result.get(timeout=1)&lt;br /&gt;
    print pool.map(f,range(10))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
解说&lt;br /&gt;
&lt;br /&gt;
pool常用的函数有:&lt;br /&gt;
apply 开启多个进程并发执行&lt;br /&gt;
apply_async 同上，但是这个是异步的，非阻塞的。&lt;br /&gt;
map 类似于内建函数map，后面提供的参数列表会一个一个应用于函数,。这里会开发多个进程并发一起执行。&lt;br /&gt;
map_async 和map相同，只不过这是一个异步的，不会阻塞等待结果。该函数会返回一个结果对象。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
运行结果&lt;br /&gt;
&amp;lt;multiprocessing.pool.ApplyResult object at 0x7f548909ce10&amp;gt;&lt;br /&gt;
100&lt;br /&gt;
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== 进程间通信 ==&lt;br /&gt;
&lt;br /&gt;
Process之间肯定是需要通信的，操作系统提供了很多机制来实现进程间的通信。Python的multiprocessing模块包装了底层的机制，提供了Queue、Pipes等多种方式来交换数据。&lt;br /&gt;
&lt;br /&gt;
我们以Queue为例，在父进程中创建两个子进程，一个往Queue里写数据，一个从Queue里读数据：&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/python&lt;br /&gt;
# -*-  coding:utf-8 -*-&lt;br /&gt;
from multiprocessing import  Process, Queue&lt;br /&gt;
import  os, time, random&lt;br /&gt;
&lt;br /&gt;
#写数据进程执行的代码:&lt;br /&gt;
def write(q):&lt;br /&gt;
    for value in [&amp;#039;A&amp;#039;,&amp;#039;B&amp;#039;,&amp;#039;C&amp;#039;]:&lt;br /&gt;
        print  &amp;#039;Put&amp;amp;nbsp;%s to queue ...&amp;#039;&amp;amp;nbsp;% value&lt;br /&gt;
        q.put(value)&lt;br /&gt;
        time.sleep(random.random())&lt;br /&gt;
&lt;br /&gt;
# 读数据进程执行的代码:&lt;br /&gt;
def read(q):&lt;br /&gt;
    while True:&lt;br /&gt;
        value = q.get(True)&lt;br /&gt;
        print &amp;#039;Get&amp;amp;nbsp;%s from queue.&amp;#039; &amp;amp;nbsp;%value&lt;br /&gt;
&lt;br /&gt;
if __name__ ==&amp;#039;__main__&amp;#039;:&lt;br /&gt;
    &amp;#039;&amp;#039;&amp;#039;#父进程创建Queue，并传给各个子进程：  &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    q = Queue()&lt;br /&gt;
    pw = Process(target=write,args=(q,))&lt;br /&gt;
    pr= Process(target=read,args=(q,))&lt;br /&gt;
    &amp;#039;&amp;#039;&amp;#039;# 启动子进程pw，写入:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
pw.start()&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;#启动子进程pr，读取:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
pr.start()&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;#等待pw结束:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
pw.join()&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;#pr进程里是死循环，无法等待其结束，只能强行终止:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
pr.terminate()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Put A to queue ...&lt;br /&gt;
Get A from queue.&lt;br /&gt;
Put B to queue ...&lt;br /&gt;
Get B from queue.&lt;br /&gt;
Put C to queue ...&lt;br /&gt;
Get C from queue.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/python&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
from multiprocessing import  Process, Queue&lt;br /&gt;
&lt;br /&gt;
def f(q):&lt;br /&gt;
    q.put([1,2,3,4])&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    # 父进程创建Queue，并传给各个子进程：&lt;br /&gt;
    q=Queue()&lt;br /&gt;
    p=Process(target=f,args=(q,))&lt;br /&gt;
    p.start()&lt;br /&gt;
    ### 读数据进程执行的代码:&lt;br /&gt;
    print q.get()&lt;br /&gt;
    p.join()&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#运行结果&lt;br /&gt;
[1, 2, 3, 4]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
参考&lt;br /&gt;
&lt;br /&gt;
[http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868323401155ceb3db1e2044f80b974b469eb06cb43000 http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868323401155ceb3db1e2044f80b974b469eb06cb43000]&lt;br /&gt;
&lt;br /&gt;
[http://forlinux.blog.51cto.com/8001278/1423390 http://forlinux.blog.51cto.com/8001278/1423390]&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>Evan</name></author>
	</entry>
</feed>