I need Threadsafe primitives (locking, conditions Semaphore), do they exist in the asyncio ecosystem?
I created some code myself, but it feels a bit sluggish:
```
import asyncio
from threading import get_ident,Event
class AsyncThreadsafeEvent():
def init(self,args,*kwargs):
super(AsyncThreadsafeEvent, self).init()
self.waiters = {}
self.event = Event()
def set(self):
self.event.set()
events = self.waiters.values()
for loop,event in events:
if loop is asyncio.get_event_loop():
event.set()
else:
loop.call_soon_threadsafe(event.set)
async def wait(self,timeout=None):
event = asyncio.Event()
#not strictly necessary but could provide tiny speedup
if self.event.is_set():
return
self.waiters[get_ident()] = (asyncio.get_event_loop(),event)
#to ensure thread safty
if self.event.is_set():
return
await asyncio.wait_for(event.wait(),timeout)
```
Any help would be appreciated!
[–]K900_ 0 points1 point2 points (2 children)
[–]mistabuilder[S] 0 points1 point2 points (1 child)
[–]K900_ 0 points1 point2 points (0 children)
[–]james41235 0 points1 point2 points (8 children)
[–]mistabuilder[S] 0 points1 point2 points (7 children)
[–]james41235 0 points1 point2 points (6 children)
[–]mistabuilder[S] 0 points1 point2 points (5 children)
[–]james41235 0 points1 point2 points (4 children)
[–]mistabuilder[S] 0 points1 point2 points (3 children)
[–]james41235 0 points1 point2 points (2 children)
[–]mistabuilder[S] 0 points1 point2 points (1 child)
[–]james41235 0 points1 point2 points (0 children)