実行時に関数を同期的に実行するか非同期的に実行するかを決定できるようにしたいので、次のコードを書きました。
class DefaultUseCeleryPolicy(UseCeleryPolicy):
def use(self):
return anyCeleryWorkerRunning() or FORCE_CELERY
#--------------------------------------------------------------------------------------
class TaskDispatcher(object):
def __init__(self, usePolicy):
self.usePolicy = usePolicy
def dispatch(self, function, *args, **kwargs):
pass
#--------------------------------------------------------------------------------------
class CeleryTaskDispatcher(TaskDispatcher):
def __init__(self, usePolicy = DefaultUseCeleryPolicy()):
super(CeleryTaskDispatcher, self).__init__(usePolicy)
def dispatch(self, function, *args, **kwargs):
if self.usePolicy.use():
t = task(function)
tasks.register(t)
t.delay(args, kwargs)
else:
function(args, kwargs)
残念ながら、これは機能しません (セロリ ワーカーから「タイプの未登録タスクを受け取りました」というエラーが表示されます)。私が望んでいることを達成することは可能ですか?