推荐使用celery + redis调度codegeex推理任务,将模型加载与推理卸载至独立worker进程,避免阻塞django主线程,并通过redis保障任务队列可靠性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您希望在Django项目中利用CodeGeeX模型执行代码生成类异步任务,需绕过同步请求限制并确保模型推理不阻塞Web请求线程。以下是实现该集成的多种可行路径:
一、使用Celery + Redis调度CodeGeeX推理任务
该方法将CodeGeeX的加载与推理过程卸载至独立Worker进程,避免Django主线程被PyTorch/TensorFlow初始化及长时推理阻塞。Redis作为消息代理保障任务队列可靠性。
1、在Django项目根目录下安装依赖:pip install celery redis transformers torch。
2、在Django项目的settings.py中配置Celery参数:CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0',并添加CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1'。
3、在项目主目录(与manage.py同级)创建celery.py,初始化Celery实例,并在__init__.py中导入该实例。
4、新建tasks.py文件,在其中定义任务函数:@shared_task def generate_code_with_codigeeex(prompt: str) -> str:,内部完成CodeGeeX模型加载(建议使用AutoModelForSeq2SeqLM.from_pretrained("THUDM/codegeex-4b"))、tokenizer构建及生成逻辑。
5、在Django视图中调用generate_code_with_codigeeex.delay(prompt)触发异步执行,并返回任务ID供前端轮询结果。
二、采用Django Channels + Daphne运行独立推理协程
此方式利用ASGI协议与Channels的消费者机制,在WebSocket或HTTP长连接上下文中启动隔离的异步协程运行CodeGeeX,适用于需实时流式返回代码片段的场景。
1、安装Channels及相关组件:pip install channels daphne,并在INSTALLED_APPS中添加'channels'。
2、在settings.py中设置ASGI_APPLICATION = 'myproject.asgi.application',并配置CHANNEL_LAYERS为inmemory或redis后端。
提供使用 django-unfold (v0.56+) 构建高级 Django 管理界面的专业指导。当用户提及 django-unfold、unfold admin 等内容时使用此技能。
3、编写consumers.py,定义AsyncJsonWebsocketConsumer子类,在receive_json中获取prompt后,使用asyncio.to_thread将模型推理包装为线程池任务,防止协程被阻塞。
4、在推理函数内部,对CodeGeeX模型执行model.generate()时显式指定do_sample=False和max_length=512以控制资源消耗。
5、通过self.send_json({"status": "completed", "code": generated_text})将结果推送给客户端。
三、封装为独立FastAPI微服务并由Django发起HTTP异步调用
该方案将CodeGeeX完全解耦出Django进程,以轻量级FastAPI服务形式提供REST接口,Django仅负责转发请求与响应,消除任何模型加载风险。
1、新建Python项目目录,安装fastapi uvicorn transformers torch,编写main.py定义/generate端点,加载CodeGeeX模型于启动时(@app.on_event("startup"))。
2、在FastAPI服务中禁用CUDA缓存复用:torch.cuda.empty_cache(),并在每次推理前调用model.to('cuda')确保设备一致性。
3、在Django视图中使用aiohttp.ClientSession发起异步POST请求,请求体为JSON格式的prompt字段,超时设为timeout=aiohttp.ClientTimeout(total=120)。
4、FastAPI端点返回结构化JSON,包含"generated_code"与"tokens_used"字段,Django接收后直接透传或做简单清洗。
5、部署时使用uvicorn main:app --host 0.0.0.0:8001 --workers 2启动两个Worker,应对并发推理请求。










