4

我试图弄清楚如何用 Celery 实现我的异步作业,而不是将它们与 Celery 实现联系起来。

如果我有一个接受要调度的对象的接口,例如可调用对象(或包装可调用对象的对象):

ITaskManager(Interface):
    def schedule(task):
        #eventually run task

我可能会使用踩踏模块来实现它:

ThreadingTaskManager(object)
    def schedule(task):
        Thread(task).start() # or similar

但似乎这不能用芹菜来完成,对吗?

4

1 回答 1

3

也许一个,虽然很丑,解决方案可能是定义一个 celery 任务,它动态加载作为参数传递的任务对象:

@celery.task
def taskrunner(taskname):
    taskModule = __import__(taskname)
    taskModule.run()

CeleryTaskManager(object)
    def schedule(task):
        taskrunner.delay(task.__file__)


from mytask import run

CeleryTaskManager().schedule(run)
于 2012-09-29T16:01:26.430 回答