python 进程与线程 (1)多进程

首先,进程和线程之间的关系:线程是最小的执行单元,一个进程至少由一个线程组成。

python 实现多进程使用multiprocessing

1、python 的os模块封装的fork()可以轻松创建子进程,但是windows中没有fork调用,所以为了程序的可迁移性就使用multiprocessing啦。

2、multiprocessing启动1个子进程。

def child(name):
    print "子进程p %s"%os.getpid()

if __name__ == "__main__":
print "父进程%s"%os.getpid()    # 创建子进程p    p = Process(target=child,args=('test',))    # 开启子进程    p.start()    p.join() ##用于进程之间的同步

3、multiprocessing启动大量子进程,用Pool

from multiprocessing import Pool
import os, time, random

def long_time_task(name):
    print('Run task %s (%s)...' % (name, os.getpid()))

if __name__=='__main__':
    print('父进程 %s.' % os.getpid())
    p = Pool(4)
    for i in range(5):
        p.apply_async(long_time_task, args=(i,))
    print('Waiting for all subprocesses done...')
    p.close()
    p.join()

结果:

父进程 6420.
Waiting for all subprocesses done...
Run task 0 (4292)...
Run task 1 (4292)...
Run task 2 (4292)...
Run task 3 (4292)...
Run task 4 (4292)...

4、进程之间通信用Queue和Pipes,下面是Queue

import multiprocessing
from multiprocessing import Queue,Process
import os, time,random
def write(q):
    print 'process to write %s'%(os.getpid())
    for value in ['a','b','c']:
        print 'put %s to queue'%(value)
        q.put(value)
        time.sleep(random.random())

def reade(q):
    print 'process to reade %s' % (os.getpid())
    while True:
        value = q.get(True)
        print 'get %s from queue'% value

if __name__=='__main__':
    # 父进程创建queue
    q = Queue()
    # 子进程1
    pw = Process(target=write,args=(q,))
    # 子进程2
    pr = Process(target=reade,args=(q,))
    pw.start()
    pr.start()
    pw.join()
    pr.join()
    pr.terminate()

结果:

process to write 11076
put a to queue
process to reade 1128
get a from queue
put b to queue
get b from queue
put c to queue
get c from queue

总之就是,实现多进程就用multiprocessing,可以创建单独的子进程,也可用pool创建大量的子进程,用Queue和Pipes实现进程之间的通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值