mirror of
https://github.com/python/cpython.git
synced 2025-11-01 06:01:29 +00:00
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
number of tests, all because of the codecs/_multibytecodecs issue described here (it's not a Py3K issue, just something Py3K discovers): http://mail.python.org/pipermail/python-dev/2006-April/064051.html Hye-Shik Chang promised to look for a fix, so no need to fix it here. The tests that are expected to break are: test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecs test_multibytecodec This merge fixes an actual test failure (test_weakref) in this branch, though, so I believe merging is the right thing to do anyway.
This commit is contained in:
parent
9ada3d6e29
commit
49fd7fa443
640 changed files with 52240 additions and 18408 deletions
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
\section{\module{Queue} ---
|
||||
A synchronized queue class}
|
||||
|
||||
|
|
@ -94,3 +95,51 @@ immediately available, else raise the \exception{Empty} exception
|
|||
\begin{methoddesc}{get_nowait}{}
|
||||
Equivalent to \code{get(False)}.
|
||||
\end{methoddesc}
|
||||
|
||||
Two methods are offered to support tracking whether enqueued tasks have
|
||||
been fully processed by daemon consumer threads.
|
||||
|
||||
\begin{methoddesc}{task_done}{}
|
||||
Indicate that a formerly enqueued task is complete. Used by queue consumer
|
||||
threads. For each \method{get()} used to fetch a task, a subsequent call to
|
||||
\method{task_done()} tells the queue that the processing on the task is complete.
|
||||
|
||||
If a \method{join()} is currently blocking, it will resume when all items
|
||||
have been processed (meaning that a \method{task_done()} call was received
|
||||
for every item that had been \method{put()} into the queue).
|
||||
|
||||
Raises a \exception{ValueError} if called more times than there were items
|
||||
placed in the queue.
|
||||
\versionadded{2.5}
|
||||
\end{methoddesc}
|
||||
|
||||
\begin{methoddesc}{join}{}
|
||||
Blocks until all items in the queue have been gotten and processed.
|
||||
|
||||
The count of unfinished tasks goes up whenever an item is added to the
|
||||
queue. The count goes down whenever a consumer thread calls \method{task_done()}
|
||||
to indicate that the item was retrieved and all work on it is complete.
|
||||
When the count of unfinished tasks drops to zero, join() unblocks.
|
||||
\versionadded{2.5}
|
||||
\end{methoddesc}
|
||||
|
||||
Example of how to wait for enqueued tasks to be completed:
|
||||
|
||||
\begin{verbatim}
|
||||
def worker():
|
||||
while True:
|
||||
item = q.get()
|
||||
do_work(item)
|
||||
q.task_done()
|
||||
|
||||
q = Queue()
|
||||
for i in range(num_worker_threads):
|
||||
t = Thread(target=worker)
|
||||
t.setDaemon(True)
|
||||
t.start()
|
||||
|
||||
for item in source():
|
||||
q.put(item)
|
||||
|
||||
q.join() # block until all tasks are done
|
||||
\end{verbatim}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue