2012-03-01 8 views
1

http://ask.github.com/celery/userguide/routing.html#manual-routingにあるドキュメントによると、queueパラメータをapply_asyncに渡すと、タスクを特定のキューにルーティングできます。タスクセットを使用している場合しかし、私はapply_asyncを使用してカスタムルーティングをTaskSetに適用できますか?

TypeError at /some/path/ 
apply_async() got an unexpected keyword argument 'queue' 

def apply_async(self, connection=None, connect_timeout=None, 
     publisher=None, taskset_id=None): 
    """Apply taskset.""" 
    app = self.app 

    if app.conf.CELERY_ALWAYS_EAGER: 
     return self.apply(taskset_id=taskset_id) 

    with app.default_connection(connection, connect_timeout) as conn: 
     setid = taskset_id or uuid() 
     pub = publisher or self.Publisher(connection=conn) 
     try: 
      results = self._async_results(setid, pub) 
     finally: 
      if not publisher: # created by us. 
       pub.close() 

     return app.TaskSetResult(setid, results) 

https://github.com/ask/celery/blob/master/celery/task/sets.py#L122

が、私はいくつかの状況に特別なルーティングを適用する必要があるために、タスクの未定義の数を持っているタスクセットクラスに次のコード与えundestandableされ得ますどのように私はこれを処理する必要がありますか? TaskSetを使用しないでください。

答えて

2

あなたはオプション引数

>>> from celery.task.sets import TaskSet 
>>> from tasks import add  
>>> 
>>> job = TaskSet(tasks=[add.subtask(args=(i, i),options={'queue':'celery'}) for i in range(10)]) 
>>> result = job.apply_async() 
>>> result.ready() 
True 
>>> job 
[tasks.add(0, 0), tasks.add(1, 1), tasks.add(2, 2), tasks.add(3, 3), tasks.add(4, 4), tasks.add(5, 5), tasks.add(6, 6), tasks.add(7, 7), tasks.add(8, 8), tasks.add(9, 9)] 
>>> 
subtasksを使用することができます
関連する問題