You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求使用App Engine任务队列的Django项目dev_appserver.py本地调试示例

Django + App Engine 任务队列本地调试(dev_appserver.py)示例

1. 基础环境准备

  • 确保已安装 gcloud SDK,本地Python版本与App Engine标准环境匹配(如3.9/3.10)
  • 安装依赖:pip install django google-cloud-tasks google-appengine-python

2. Django项目配置调整

2.1 settings.py 关键配置

添加App Engine相关配置,替换Django自带任务队列为GCP任务队列:

# settings.py
INSTALLED_APPS = [
    # ... 原有Django应用
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 新增GCP任务队列依赖
    'google.cloud.tasks',
]

# 禁用Django自带任务队列(若之前用Celery需同步调整)
CELERY_ALWAYS_EAGER = False
# 本地任务队列服务默认端点
GOOGLE_CLOUD_TASKS_ENDPOINT = 'http://localhost:8081'
# 本地调试用任意项目ID/区域即可
GOOGLE_CLOUD_PROJECT = 'local-dev-project'
GOOGLE_CLOUD_LOCATION = 'us-central1'

2.2 任务队列定义(queue.yaml)

在项目根目录创建queue.yaml,配置本地调试队列:

queue:
- name: default
  rate: 10/s
  bucket_size: 10
- name: high-priority
  rate: 50/s
  bucket_size: 50

3. 任务示例代码

3.1 任务处理视图(tasks/views.py)

# tasks/views.py
from django.http import HttpResponse
from google.cloud import tasks_v2
from django.conf import settings
import json

def create_task(request):
    # 初始化本地任务队列客户端
    client = tasks_v2.CloudTasksClient(client_options={
        'api_endpoint': settings.GOOGLE_CLOUD_TASKS_ENDPOINT
    })

    # 构建任务参数
    parent = client.queue_path(
        settings.GOOGLE_CLOUD_PROJECT,
        settings.GOOGLE_CLOUD_LOCATION,
        'default'
    )

    task = {
        'http_request': {
            'http_method': tasks_v2.HttpMethod.POST,
            'url': 'http://localhost:8080/tasks/process/',
            'headers': {'Content-Type': 'application/json'},
            'body': json.dumps({'data': 'test task content'}).encode()
        }
    }

    # 创建任务
    response = client.create_task(request=parent, task=task)
    return HttpResponse(f"任务创建成功:{response.name}")

def process_task(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        # 这里编写任务处理逻辑,如操作Datastore、日志打印等
        print(f"正在处理任务:{data}")
        return HttpResponse("任务处理完成")
    return HttpResponse(status=405)

3.2 路由配置(project/urls.py)

# project/urls.py
from django.contrib import admin
from django.urls import path
from tasks.views import create_task, process_task

urlpatterns = [
    path('admin/', admin.site.urls),
    path('tasks/create/', create_task, name='create_task'),
    path('tasks/process/', process_task, name='process_task'),
]

4. 启动本地调试服务

4.1 启动dev_appserver.py

在项目根目录执行命令:

dev_appserver.py app.yaml queue.yaml

附基础app.yaml配置:

# app.yaml
runtime: python39
handlers:
- url: /.*
  script: auto

4.2 验证流程

访问 http://localhost:8080/tasks/create/ 创建任务,dev_appserver会自动触发/tasks/process/端点处理任务,可在终端查看日志输出;访问 http://localhost:8081/taskqueue 查看队列状态、任务详情。

5. 本地调试技巧

  • 断点调试:在任务处理函数中添加IDE断点,直接调试逻辑
  • 重试测试:在处理函数中抛出异常,验证队列的任务重试机制
  • 队列管理:通过http://localhost:8081/taskqueue手动清空队列、查看任务执行历史

内容的提问来源于stack exchange,提问作者HitLuca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:01:10