Mini Shell
"""Pool implementation abstract factory, and alias definitions."""
import os
# Import from kombu directly as it's used
# early in the import stage, where celery.utils loads
# too much (e.g., for eventlet patching)
from kombu.utils.imports import symbol_by_name
__all__ = ('get_implementation', 'get_available_pool_names',)
ALIASES = {
'prefork': 'celery.concurrency.prefork:TaskPool',
'eventlet': 'celery.concurrency.eventlet:TaskPool',
'gevent': 'celery.concurrency.gevent:TaskPool',
'solo': 'celery.concurrency.solo:TaskPool',
'processes': 'celery.concurrency.prefork:TaskPool', # XXX compat alias
}
try:
import concurrent.futures # noqa
except ImportError:
pass
else:
ALIASES['threads'] = 'celery.concurrency.thread:TaskPool'
#
# Allow for an out-of-tree worker pool implementation. This is used as follows:
#
# - Set the environment variable CELERY_CUSTOM_WORKER_POOL to the name of
# an implementation of :class:`celery.concurrency.base.BasePool` in the
# standard Celery format of "package:class".
# - Select this pool using '--pool custom'.
#
try:
custom = os.environ.get('CELERY_CUSTOM_WORKER_POOL')
except KeyError:
pass
else:
ALIASES['custom'] = custom
def get_implementation(cls):
"""Return pool implementation by name."""
return symbol_by_name(cls, ALIASES)
def get_available_pool_names():
"""Return all available pool type names."""
return tuple(ALIASES.keys())
Zerion Mini Shell 1.0