Python 芹菜中PeriodicTask run()方法的Own参数

Python 芹菜中PeriodicTask run()方法的Own参数,python,rabbitmq,celery,Python,Rabbitmq,Celery,我正在编写一个小的Django应用程序,我应该能够创建 对于每个模型对象,其周期性任务将使用 一定的间隔。我正在使用这个芹菜应用程序,但我不明白一件事: class ProcessQueryTask(PeriodicTask): run_every = timedelta(minutes=1) def run(self, query_task_pk, **kwargs): logging.info('Process celery task for QueryTask

我正在编写一个小的Django应用程序,我应该能够创建 对于每个模型对象,其周期性任务将使用 一定的间隔。我正在使用这个芹菜应用程序,但我不明白一件事:

class ProcessQueryTask(PeriodicTask):
   run_every = timedelta(minutes=1)

   def run(self, query_task_pk, **kwargs):
       logging.info('Process celery task for QueryTask %d' %
query_task_pk)
       task = QueryTask.objects.get(pk=query_task_pk)
       task.exec_task()
       return True
那么我要做以下几点:

>>> from tasks.tasks import ProcessQueryTask
>>> result1 = ProcessQueryTask.delay(query_task_pk=1)
>>> result2 = ProcessQueryTask.delay(query_task_pk=2)
第一次调用成功,但其他周期性调用返回错误 -TypeError:run()在中正好接受2个非关键字参数(给定1个) celeryd服务器。
我是否可以将自己的参数传递给PeriodicTask
run()

这一问题在上的Ask Solem中得到了极好的回答

周期性任务不使用参数,因此您需要做几个 类或生成处理多个“模型”的周期性任务

例如:

但你更可能想要这样的东西:

@task(ignore_result=True)
def execute_query_task(task):
    task.exec_task()

@periodic_task(run_every=timedelta(minutes=1))
def process_query_tasks():
    for task in QueryTask.objects.all():
        ExecuteQueryTask.delay(task)
@task(ignore_result=True)
def execute_query_task(task):
    task.exec_task()

@periodic_task(run_every=timedelta(minutes=1))
def process_query_tasks():
    for task in QueryTask.objects.all():
        ExecuteQueryTask.delay(task)