【问题标题】:Celery dynamic tasks / hiding Celery implementation behind an interfaceCelery 动态任务 / 在接口后面隐藏 Celery 实现
【发布时间】:2012-09-21 03:35:07
【问题描述】:

我正在尝试弄清楚如何使用 Celery 实现我的异步作业,而不是将它们与 Celery 实现绑定。

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

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

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

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

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

【问题讨论】:

    标签: python interface celery encapsulation


    【解决方案1】:

    也许一个,虽然很丑,解决方案可能是定义一个 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 2018-04-13
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2014-06-13
      相关资源
      最近更新 更多