2012-09-29 27 views
4

我想弄清楚如何實現與芹菜異步作業,而不將它們綁定到芹菜實現。芹菜動態任務/隱藏在接口後面的芹菜實現

如果我有一個接受的對象安排,如可調用的接口(或者說包裝了一個可調用的對象):

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

我可能會踏入模塊實現:

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

但是,這似乎不能用芹菜做,我說得對嗎?

回答

3

也許有,雖然相當難看,解決辦法是定義一個動態加載被作爲參數傳遞任務對象一個芹菜任務:

@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)