Improve the file server shutdown logic and display the shutdown progress bar in the UI
This commit is contained in:
parent
77d2d69376
commit
e3daa09316
9 changed files with 170 additions and 75 deletions
|
@ -3,17 +3,37 @@ from Debug import Debug
|
|||
|
||||
|
||||
class GreenletManager:
|
||||
def __init__(self):
|
||||
# pool is either gevent.pool.Pool or GreenletManager.
|
||||
# if pool is None, new gevent.pool.Pool() is created.
|
||||
def __init__(self, pool=None):
|
||||
self.greenlets = set()
|
||||
if not pool:
|
||||
pool = gevent.pool.Pool(None)
|
||||
self.pool = pool
|
||||
|
||||
def _spawn_later(self, seconds, *args, **kwargs):
|
||||
# If pool is another GreenletManager, delegate to it.
|
||||
if hasattr(self.pool, 'spawnLater'):
|
||||
return self.pool.spawnLater(seconds, *args, **kwargs)
|
||||
|
||||
# There's gevent.spawn_later(), but there isn't gevent.pool.Pool.spawn_later().
|
||||
# Doing manually.
|
||||
greenlet = self.pool.greenlet_class(*args, **kwargs)
|
||||
self.pool.add(greenlet)
|
||||
greenlet.start_later(seconds)
|
||||
return greenlet
|
||||
|
||||
def _spawn(self, *args, **kwargs):
|
||||
return self.pool.spawn(*args, **kwargs)
|
||||
|
||||
def spawnLater(self, *args, **kwargs):
|
||||
greenlet = gevent.spawn_later(*args, **kwargs)
|
||||
greenlet = self._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 = self._spawn(*args, **kwargs)
|
||||
greenlet.link(lambda greenlet: self.greenlets.remove(greenlet))
|
||||
self.greenlets.add(greenlet)
|
||||
return greenlet
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue