您的位置:首页 > 编程语言 > Python开发

python queue pip

2016-06-21 00:00 323 查看
1.Queue
self._reader, self._writer = Pipe(duplex=False)
管道描述符 5/6
self._rlock = Lock()
self._opid = os.getpid()

self._wlock = Lock()




#coding:utf-8

from multiprocessing import Process, Queue
import os, time, random

写数据进程执行的代码:

def write(q):
for value in ['A', 'B', 'C']:
print 'Put %s to queue...' % value
q.put(value)
time.sleep(random.random())

读数据进程执行的代码:

def read(q):
while True:
value = q.get(True)
print 'Get %s from queue.' % value

if name=='main':
# 父进程创建Queue,并传给各个子进程:
q = Queue()
pw = Process(target=write, args=(q,))
pr = Process(target=read, args=(q,))
# 启动子进程pw,写入:
pw.start()
# 启动子进程pr,读取:
pr.start()
# 等待pw结束:
pw.join()
# pr进程里是死循环,无法等待其结束,只能强行终止:
pr.terminate()

=========================
w:q.put()
def put(self, obj, block=True, timeout=None)://obj是数据
assert not self._closed
if not self._sem.acquire(block, timeout):
raise Full

self._notempty.acquire()
try:
if self._thread is None:
self._start_thread()
self._buffer.append(obj)//self._buffer.append拿到写者数据.
self._notempty.notify()//通知读
finally:
self._notempty.release()

r: q.get()
def get(self, block=True, timeout=None):
if block and timeout is None:
self._rlock.acquire()//管道可读
try:
res = self._recv()// ‘A..‘读出数据
self._sem.release()
return res
finally:
self._rlock.release()//释放’rlock‘
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: