service: don't acquire lock when pool already initialized

pull/607/head
David Wilson 7 years ago
parent f4709b1dc2
commit 50bfe4c746

@ -77,20 +77,25 @@ else:
def get_or_create_pool(size=None, router=None): def get_or_create_pool(size=None, router=None):
global _pool global _pool
global _pool_pid global _pool_pid
my_pid = os.getpid()
if _pool is None or my_pid != _pool_pid:
# Avoid acquiring heavily contended lock if possible.
_pool_lock.acquire() _pool_lock.acquire()
try: try:
if _pool_pid != os.getpid(): if _pool_pid != my_pid:
_pool = Pool(router, [], size=size or DEFAULT_POOL_SIZE, _pool = Pool(router, [], size=size or DEFAULT_POOL_SIZE,
overwrite=True) overwrite=True)
# In case of Broker shutdown crash, Pool can cause 'zombie' # In case of Broker shutdown crash, Pool can cause 'zombie'
# processes. # processes.
mitogen.core.listen(router.broker, 'shutdown', mitogen.core.listen(router.broker, 'shutdown',
lambda: _pool.stop(join=False)) lambda: _pool.stop(join=True))
_pool_pid = os.getpid() _pool_pid = os.getpid()
return _pool
finally: finally:
_pool_lock.release() _pool_lock.release()
return _pool
def call(service_name, method_name, call_context=None, **kwargs): def call(service_name, method_name, call_context=None, **kwargs):
""" """

Loading…
Cancel
Save