On 25 Feb 2021, at 17:15, Jonathan Slenders <firstname.lastname@example.org> wrote:It does make sense to have a barrier synchronization primitive for asyncio.The idea is to make a coroutine block until at least X coroutines are waiting to enter the barrier.This is very useful, if certain actions need to be synchronized.
Recently, I had to implement a barier myself for our use case. See code below:It is simple to implement, but I too would like to have one for asyncio, in order to be consistent with the concurrency primitives we have for threading.Jonathanclass Barier:
Make a coroutine block until there are at least X waiters.
Similar to the threading Barier objects but for asyncio:
def __init__(self, parties: int) -> None:
self.parties = parties
self._event = asyncio.Event()
def add_one(self) -> None:
self._waiting += 1
if self._waiting == self.parties:
async def wait(self, worker: "Worker") -> None:
Wait until all we have at least `parties` waiters.
await self._event.wait()Le jeu. 25 févr. 2021 à 16:42, Barry Scott <email@example.com> a écrit :
> On 25 Feb 2021, at 13:14, Yves Duprat <firstname.lastname@example.org> wrote:
> Hi,the list,
> I'm wondering why Barrier object does not exist in the synchronization primitives of the asyncio lib while it is present in threading and multiprocessing libs ?
> This may not be the right place to ask this question, but I never found an answer on the web.
> Thanks for your help.
I'm assuming that the barrier you are speaking of is the mechanism that is used to
synchronise threads/processes running in parallel to prevent data races.
With async code that is never an issue. Each function runs to completion uninterrupted.
There are no data races. Each time a async function runs it can know that the state of
the objects it uses will not be changed while it is running.
> Python-ideas mailing list -- email@example.com
> To unsubscribe send an email to firstname.lastname@example.org
> Message archived at https://email@example.com/message/IAFAH7PWMUDUTLXYLNSXES7VMDQ26A3W/
> Code of Conduct: http://python.org/psf/codeofconduct/
Python-ideas mailing list -- firstname.lastname@example.org
To unsubscribe send an email to email@example.com
Message archived at https://firstname.lastname@example.org/message/B6WDPXNZH5KYK2BLHJXUFZF2DLFBLCBR/
Code of Conduct: http://python.org/psf/codeofconduct/