mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +00:00
issue5738: The distribution example was confusing, and out of date. It's too large to include inline in the docs as well. It belongs in an addons module outside the stdlib. Removing.
This commit is contained in:
parent
c4920e86ef
commit
6c3767445c
3 changed files with 18 additions and 373 deletions
|
@ -47,6 +47,8 @@ class Queue(object):
|
|||
if sys.platform != 'win32':
|
||||
register_after_fork(self, Queue._after_fork)
|
||||
|
||||
self.getv = 0
|
||||
|
||||
def __getstate__(self):
|
||||
assert_spawning(self)
|
||||
return (self._maxsize, self._reader, self._writer,
|
||||
|
@ -71,6 +73,8 @@ class Queue(object):
|
|||
self._poll = self._reader.poll
|
||||
|
||||
def put(self, obj, block=True, timeout=None):
|
||||
if not isinstance(obj, list):
|
||||
debug('put: %s', obj)
|
||||
assert not self._closed
|
||||
if not self._sem.acquire(block, timeout):
|
||||
raise Full
|
||||
|
@ -85,11 +89,15 @@ class Queue(object):
|
|||
self._notempty.release()
|
||||
|
||||
def get(self, block=True, timeout=None):
|
||||
self.getv += 1
|
||||
debug('self.getv: %s', self.getv)
|
||||
if block and timeout is None:
|
||||
self._rlock.acquire()
|
||||
try:
|
||||
res = self._recv()
|
||||
self._sem.release()
|
||||
if not isinstance(res, list):
|
||||
debug('get: %s', res)
|
||||
return res
|
||||
finally:
|
||||
self._rlock.release()
|
||||
|
@ -104,6 +112,8 @@ class Queue(object):
|
|||
raise Empty
|
||||
res = self._recv()
|
||||
self._sem.release()
|
||||
if not isinstance(res, list):
|
||||
debug('get: %s', res)
|
||||
return res
|
||||
finally:
|
||||
self._rlock.release()
|
||||
|
@ -229,16 +239,22 @@ class Queue(object):
|
|||
try:
|
||||
while 1:
|
||||
obj = bpopleft()
|
||||
if not isinstance(obj, list):
|
||||
debug('feeder thread got: %s', obj)
|
||||
if obj is sentinel:
|
||||
debug('feeder thread got sentinel -- exiting')
|
||||
close()
|
||||
return
|
||||
|
||||
if wacquire is None:
|
||||
if not isinstance(obj, list):
|
||||
debug('sending to pipe: %s', obj)
|
||||
send(obj)
|
||||
else:
|
||||
wacquire()
|
||||
debug('waiting on wacquire')
|
||||
wacquire(timeout=30)
|
||||
try:
|
||||
if not isinstance(obj, list):
|
||||
debug('sending to pipe: %s', obj)
|
||||
send(obj)
|
||||
finally:
|
||||
wrelease()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue