#coding:utf-8
from multiprocessing import Process
from multiprocessing import Pool
from multiprocessing import Queue
from multiprocessing import Pipe
from multiprocessing import Lock
from multiprocessing import Semaphore
from multiprocessing import Event
import os
def fun(i):
print i
if __name__=='__main__':
#优先考虑Pipe和Queue,避免使用Lock,Semaphore,Event等同步方式
#多进程应该避免共享资源
#通过os的fork创建进程
pid=os.fork()
if pid==0:
#子线程
else:
#等待子进程结束,相当于join,不然子进程将成为僵尸进程
os.wait()
#父进程
#Process创建进程
#agrs是一个iter
p=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才能join
p.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, ))
#Lock
def l(lock):
#上锁
Lock.acquire()
。。。
#解锁
Lock.release()
#Semaphore
#设置资源数,用于Lock时用
#Event进程间同步通信
python 进程multiprocessing库
最新推荐文章于 2023-11-03 14:38:34 发布