python 进程multiprocessing库

来源:互联网 发布:口袋妖怪淘宝买精灵 编辑:程序博客网 时间:2024/05/16 01:31
#coding:utf-8from multiprocessing import Processfrom multiprocessing import Poolfrom multiprocessing import Queuefrom multiprocessing import Pipefrom multiprocessing import Lockfrom multiprocessing import Semaphorefrom multiprocessing import Eventimport osdef fun(i):print iif __name__=='__main__':#优先考虑Pipe和Queue,避免使用Lock,Semaphore,Event等同步方式#多进程应该避免共享资源#通过os的fork创建进程pid=os.fork()if pid==0:#子线程else:#等待子进程结束,相当于join,不然子进程将成为僵尸进程os.wait()#父进程#Process创建进程#agrs是一个iterp=Process(target=fun, args=(1, ))p.start()print os.getpid()p.join()#Pool创建线程池p=Pool()#默认线程数是cpu核心数for i in range(5):p.apply_async(fun, args=(i, ))#必须先close才能joinp.close()p.join()#####进程间通信#####Queue是多进程安全的队列def write(q):q.put('a')print 'put ok'def read(q):val=q.get(True)print 'get %s ok'%val#建立队列q=Queue()#multiprocess属于跨平台,线程间通信必须先pickle序列化pw=Process(target=write, args=(q, ))pr=Process(target=read, args=(q, ))pw.start()pr.start()pw.join()#关闭进程pr.terminate()#Pipe#Pipe返回两个端,duplex为True时,管道为全双工,两端都可以收发,False,conn1接受,conn2发送def send(conn):conn.send("123")conn.close()conn1, conn2=Pipe(duplex)pr=Process(target=func, args=(con1, ))pw=Process(target=func, args=(con2, ))#Lockdef l(lock):#上锁Lock.acquire()。。。#解锁Lock.release()#Semaphore#设置资源数,用于Lock时用#Event进程间同步通信

0 1
原创粉丝点击