ZeroNet/src/util/GreenletManager.py

25 lines
777 B
Python
Raw Normal View History

import gevent
2019-11-20 14:07:33 +01:00
from Debug import Debug
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
2019-11-20 14:07:33 +01:00
def stopGreenlets(self, reason="Stopping all greenlets"):
num = len(self.greenlets)
2020-06-30 17:04:47 +02:00
gevent.killall(list(self.greenlets), Debug.createNotifyType(reason), block=False)
return num