在Python和App Engine中启用定时任务,可以使用Google Cloud Tasks服务。以下是一个示例代码,展示如何配置WSGI处理程序/Flask来处理定时任务:
首先,你需要安装google-cloud-tasks
库,可以使用以下命令安装:
pip install google-cloud-tasks
接下来,你需要在Google Cloud Console中创建一个Cloud Tasks队列。在队列设置中,你可以指定定时任务的频率和目标URL。
在你的Flask应用程序中,你可以创建一个处理定时任务的路由,例如/tasks/mytask
:
from flask import Flask, request
app = Flask(__name__)
@app.route('/tasks/mytask', methods=['POST'])
def handle_task():
# 在这里处理定时任务的逻辑
# ...
return 'Task completed'
if __name__ == '__main__':
app.run()
接下来,你需要编写一个函数,将定时任务添加到Cloud Tasks队列中。你可以使用google-cloud-tasks
库中的CloudTasksClient
类来实现:
from google.cloud import tasks_v2
from google.protobuf import timestamp_pb2
def create_task(project, queue, location, url, payload=None, in_seconds=None):
client = tasks_v2.CloudTasksClient()
parent = client.queue_path(project, location, queue)
task = {
'http_request': {
'http_method': 'POST',
'url': url,
'body': payload
}
}
if in_seconds:
timestamp = timestamp_pb2.Timestamp()
timestamp.FromDatetime(datetime.datetime.utcnow() + timedelta(seconds=in_seconds))
task['schedule_time'] = timestamp
response = client.create_task(parent, task)
return response
你可以在需要添加定时任务的地方调用create_task
函数,例如:
from datetime import datetime, timedelta
project = 'your-project-id'
queue = 'your-queue-name'
location = 'your-location'
url = 'https://your-app-url/tasks/mytask'
payload = 'your-payload'
# 添加一个在10秒后执行的定时任务
create_task(project, queue, location, url, payload, in_seconds=10)
这样,当定时任务触发时,Cloud Tasks服务将向你的应用程序发送POST请求,你的Flask应用程序将使用handle_task
函数来处理该请求。