Track and stop site connected greenlets on delete
This commit is contained in:
parent
2ad3493fb0
commit
1c607645c7
6 changed files with 51 additions and 16 deletions
23
src/util/GreenletManager.py
Normal file
23
src/util/GreenletManager.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
import gevent
|
||||
|
||||
|
||||
class GreenletManager:
|
||||
def __init__(self):
|
||||
self.greenlets = set()
|
||||
|
||||
def spawnLater(self, *args, **kwargs):
|
||||
greenlet = gevent.spawn_later(*args, **kwargs)
|
||||
greenlet.link(lambda greenlet: self.greenlets.remove(greenlet))
|
||||
self.greenlets.add(greenlet)
|
||||
return greenlet
|
||||
|
||||
def spawn(self, *args, **kwargs):
|
||||
greenlet = gevent.spawn(*args, **kwargs)
|
||||
greenlet.link(lambda greenlet: self.greenlets.remove(greenlet))
|
||||
self.greenlets.add(greenlet)
|
||||
return greenlet
|
||||
|
||||
def stopGreenlets(self, reason="Stopping greenlets"):
|
||||
num = len(self.greenlets)
|
||||
gevent.killall(list(self.greenlets))
|
||||
return num
|
Loading…
Add table
Add a link
Reference in a new issue