我试图了解芹菜是如何工作的
在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
使用某种倒计时?
答案 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页上查看其他提示。