我想安排一个任务(即一段代码)在稍后执行,其中执行的时间和日期以及其他参数作为任务有效负载传递。
所以我们有一个基于Python(Django)的Appengine应用程序,其中:
任务在 tasks.py
中定义@csrf_exempt
def task_myfunction(request):
if request.method == 'POST':
# Read POST parameters
# Perform task
return HttpResponse("Success")
Payload被添加到 views.py 的队列中,并且有效负载被POST到提供的URL,后者映射到上面定义的函数。
from google.appengine.api import taskqueue
# ..Somewhere inside a view..
taskqueue.add(queue_name='myqueue', url='/task/myfunction', params={
# Specify parameters
})
有没有办法,我可以指定执行的准确时间(带有时区)以及有效负载数据,以便从队列中自动获取任务并在该时刻执行。
答案 0 :(得分:5)
您可以计算所需的时间,然后在添加任务时为其设置countdown
或eta
。
倒计时:
执行此任务之前等待的最短时间,以秒为单位。默认 为零。如果指定了eta,请不要指定倒计时。
ETA:
任务执行的最早时间,以秒为单位。 它是一个datetime.datetime,指定绝对ETA或None;这可能是时区感知或时区天真。如果为None,则默认为now。它必须在当前日期之后不到30天。
https://developers.google.com/appengine/docs/python/taskqueue/tasks
正如您在上面的页面中看到的那样,似乎没有办法完全按照您的需要进行操作:时区和特定时间。我想你必须做那些计算。
答案 1 :(得分:1)
您正在寻找ETA。通过一些代码来解释如何在未来设置任务
taskqueue.add(
queue_name = "playercommands",
url="/playercommands/next/",
method='POST',
eta=datetime.datetime.now() + datetime.timedelta(0, player.track_duration),
headers={"X-AppEngine-FailFast":"true"} # for now
)
答案 2 :(得分:0)
您可以使用python-dateutil
获取时区不敏感的时间戳(如unix时间戳)然后您可以使用appengine后端并使用该时区不敏感的时间戳来安排您的任务。 https://developers.google.com/appengine/docs/python/backends/
答案 3 :(得分:0)
Google更新了这部分api(see here抱歉,链接适用于PHP)。您现在可以使用包含以下选项的PushTask发送第3个参数: