from typing import cast from channels.layers import BaseChannelLayer, get_channel_layer from rest_framework import status from rest_framework.decorators import action from rest_framework.request import Request from rest_framework.response import Response from rest_framework.viewsets import ViewSet from sixGuoDjango import BaseResponse, ResData from wechat_项目工具包.EMS中国邮政.ems邮政 import ems邮政物流工具 default_channel_layer = cast(BaseChannelLayer, get_channel_layer(alias="default")) from functools import wraps import threading def sync_lock(lock): def decorator(fn): @wraps(fn) def wrapper(*args, **kwargs): with lock: return fn(*args, **kwargs) return wrapper return decorator class 实时更新物流数据ViewSets(ViewSet): lock = threading.Lock() # 所有请求 共享这一个 lock对象 @sync_lock(lock=lock) # 锁住这个接口所有并发请求, @action(detail=False, methods=["get", "post", "put", "delete"], url_path="实时更新物流数据") def 实时更新物流数据(self, request: Request): """前端小程序, 物流追踪页面, 左上角 刷新按钮 返回的数据""" order物流公司订单编号 = request.data.get("order物流公司订单编号", None) ems邮政物流工具().更新物流快递数据(order物流公司订单编号=order物流公司订单编号, ) print("调有了实时更新的数据接口,这里更新的数据为ems的物流的数据") httpResData = BaseResponse(resData=ResData(listData=[""], dictData={}), ).model_dump() return Response(data=httpResData, status=status.HTTP_200_OK)