芹菜,用倒计时调用延迟

时间:2018-02-21 15:57:17

标签: python django celery django-celery

我试图了解芹菜是如何工作的

tasks.py文件的django应用程序中,我创建了一个任务:

@celery.shared_task(default_retry_delay=2 * 60, max_retries=2)
def my_task(param1, param2):
    # There are some operations

我使用以下代码调用此任务:

my_task.delay(param1, param2)

my_task内部,有一种情况应该再次启动此任务但延迟一分钟后

我发现任务有ETA and countdown种类,但他们的示例仅适用于apply_async

是否可以对delay使用某种倒计时?

2 个答案:

答案 0 :(得分:5)

来自basic part of celery Calling documentation

delay(*args, **kwargs)
     

发送任务消息的快捷方式,但不支持执行   选项

     

所以延迟显然很方便,但是如果你想设置额外的   执行选项必须使用 apply_async

由于文档状态delay无法与其他选项一起使用,因此您只需将来电转换为apply_async

如果要添加执行选项,文档建议您使用签名。 e.g:

my_task.s(arg1, arg2).apply_async(countdown=60)

答案 1 :(得分:5)

只需添加到iklinac的答案中即可。这就是您使用apply_async()调用任务的方式

print("the text is", self.entry.get())

class InputPage(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self,parent)        

        label =  Label(self, text="Please give data number four")
        label.grid(row=0, column=0, sticky ='n', columnspan =2)

        # i brought your variable in the class for example sake 

        namesInput = ["First:", "second:", "Third:", "Fourth:", "Fifth:"]

        self.entryWidgets = [] # we want to call this in another function so we assign it as self.variableName

        labelWidgets = []

        #LOOP TO CREATE WIDGETS
        for i in range(0, len(namesInput)):
            labelWidgets.append(Label(self, text = namesInput[i]))
            self.entryWidgets.append(Entry(self))
            labelWidgets[-1].grid(row= i+1, column =0, sticky='e')
            self.entryWidgets[-1].grid(row= i+1, column = 1, sticky='w')

        submit = Button(self, text = "Submit", command = self.getEntries)
        submit.grid(row = 6, column =0, columnspan =2)

    def getEntries(self):
        results = []

        for x in self.entryWidgets: # i.e for each widget in entryWidget list
            results.append(x.get())
        print(results)

如果您使用Flower之类的工具进行监视,第二个选项将非常有用。您可以在Celery tasks best practices页上查看其他提示。