python 进程multiprocessing库

#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进程间同步通信




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值