2010-09-07 141 views
1

我想使用芹菜的AbortableTask功能,但文檔示例似乎並沒有爲我工作。給出的例子是:Django芹菜AbortableTask用法

from celery.contrib.abortable import AbortableTask 

def MyLongRunningTask(AbortableTask): 

    def run(self, **kwargs): 
     logger = self.get_logger(**kwargs) 
     results = [] 
     for x in xrange(100): 
      # Check after every 5 loops.. 
      if x % 5 == 0: # alternatively, check when some timer is due 
       if self.is_aborted(**kwargs): 
        # Respect the aborted status and terminate 
        # gracefully 
        logger.warning("Task aborted.") 
        return None 
      y = do_something_expensive(x) 
      results.append(y) 
     logger.info("Task finished.") 
     return results 

from myproject.tasks import MyLongRunningTask 

def myview(request): 

    async_result = MyLongRunningTask.delay() 
    # async_result is of type AbortableAsyncResult 

    # After 10 seconds, abort the task 
    time.sleep(10) 
    async_result.abort() 

    ... 

不過,我得到的錯誤:

TypeError: MyLongRunningTask() takes exactly 1 argument (0 given) 

我在做什麼錯?

回答

2

只是一個猜測,但我認爲它應該是

class MyLongRunningTask(AbortableTask) 

,而不是

def MyLongRunningTask(AbortableTask) 
+0

我給這個一杆(有意義),但錯誤依然存在。我絕對不能把任務稱爲正確的。 – Anon 2010-09-07 17:28:22

+0

我給了這個又一次嘗試,因爲它看起來是對的,現在它可以工作。我假設我只是沒有用任務更新文件。 – Anon 2010-09-08 17:50:19