Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
5cee47f3
Commit
5cee47f3
authored
Jan 11, 2011
by
Raymond Hettinger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add entry for Barrier objects.
parent
a3e8f3d8
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
46 additions
and
5 deletions
+46
-5
Doc/library/threading.rst
Doc/library/threading.rst
+1
-1
Doc/whatsnew/3.2.rst
Doc/whatsnew/3.2.rst
+43
-1
Lib/threading.py
Lib/threading.py
+2
-3
No files found.
Doc/library/threading.rst
View file @
5cee47f3
...
...
@@ -868,7 +868,7 @@ As an example, here is a simple way to synchronize a client and server thread::
constructor.
The return value is an integer in the range 0 to *parties* -- 1, different
for each thrad. This can be used to select a thread to do some special
for each thr
e
ad. This can be used to select a thread to do some special
housekeeping, e.g.::
i = barrier.wait()
...
...
Doc/whatsnew/3.2.rst
View file @
5cee47f3
...
...
@@ -817,7 +817,49 @@ collections
(Contributed by Raymond Hettinger.)
.. XXX threading.py and Barrier objects
threading
---------
The :mod:`threading` module has a new :class:`~threading.Barrier`
synchronization class for making multiple threads wait until all of them have
reached a common barrier point. Barriers are useful for making sure that a task
with multiple preconditions does not run until all of the predecessor tasks are
complete.
Barriers can work with an arbitrary number of threads. This is a generalization
of a `Rendezvous <http://en.wikipedia.org/wiki/Synchronous_rendezvous>`_ which
is defined for only two threads.
The barrier is designed to be cyclic, making it reusable once all of the
waiting threads are released.
If any of the predecessor tasks can hang or be delayed, a barrier can be created
with an optional *timeout* parameter. Then if the timeout period elapses before
all the predecessor tasks reach the barrier point, all waiting threads are
released and a :exc:`~threading.BrokenBarrierError` exception is raised.
Example of using barriers::
def get_votes(site):
ballots = conduct_election(site)
all_polls_closed.wait() # do not count until all polls are closed
summarize(ballots)
all_polls_closed = Barrier(len(sites))
for site in sites(get_votes(site)):
Thread(target=get_votes, args=(site,)).start()
In this example, the barrier enforces a rule that votes cannot be counted at any
polling site until all polls are closed. Notice how a solution with a barrier
is similar to one with :meth:`threading.Thread.join`, but the threads stay alive
and continue to do work (summarizing ballots) after the barrier point is
crossed.
See `Barrier Synchronization Patterns
<http://parlab.eecs.berkeley.edu/wiki/_media/patterns/paraplop_g1_3.pdf>`_
for more examples of how barriers can be used in parallel computing.
(Contributed by Kristján Valur Jónsson in :issue:`8777`.)
datetime
--------
...
...
Lib/threading.py
View file @
5cee47f3
...
...
@@ -17,12 +17,11 @@ from collections import deque
# with the multiprocessing module, which doesn't provide the old
# Java inspired names.
# Rename some stuff so "from threading import *" is safe
__all__
=
[
'active_count'
,
'Condition'
,
'current_thread'
,
'enumerate'
,
'Event'
,
'Lock'
,
'RLock'
,
'Semaphore'
,
'BoundedSemaphore'
,
'Thread'
,
'Lock'
,
'RLock'
,
'Semaphore'
,
'BoundedSemaphore'
,
'Thread'
,
'Barrier'
,
'Timer'
,
'setprofile'
,
'settrace'
,
'local'
,
'stack_size'
]
# Rename some stuff so "from threading import *" is safe
_start_new_thread
=
_thread
.
start_new_thread
_allocate_lock
=
_thread
.
allocate_lock
_get_ident
=
_thread
.
get_ident
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment