我利用uwsgi,django和django-rest-framework来开发一个应用程序。
我在渲染器类中引入了一个类变量,这个变量将作为响应的一部分填充。
问题似乎如下:
class xxxRenderer(xxxBase)
response_pb_msg = obj # it's one instance of protobuf message
def render():
if True:
self.response_pb_msg.items = []
else:
self.response_pb_msg.retCode = 100
self.response_pb_msg.otherXXXX = xxxx
在django logger处理程序中,我再次访问此类变量,如下所示:
xxxRenderer.response_pb_msg.ParseFromString(body)
第一次回复后,这个类变量' response_pb_msg'只有一个属性" retCode"
但是第二个响应,它有三个属性" retCode"," otherXXXX"和"项目"
很奇怪,第二个回复包含第一个回复中存在的所有内容。
过了一段时间,我重写了这节课,如下:
class xxxBaserender(xxRender)
def __init__():
if self.response_pb_msg_cls is not None and isinstance(self.response_pb_msg_cls, GeneratedProtocolMessageType):
self.response_pb_message = self.response_pb_msg_cls()
class xxxRenderer(xxxBaserender)
response_pb_msg_cls = msgName # the class of protobuf message
理论上,第二类是好的。我测试过,没有复制过这个问题。
让我们回到我们开始的地方 每个请求finisehd,所有resoure应该是干净的。 但我对这个问题非常困惑,似乎在响应返回后,类变量没有在uwsgi进度中发布。
我读过“PEP 3333”,没有得到任何有价值的信息。 我想我并没有完全理解python中的类可变,wsgi和web处理流程。
任何人都可以帮我理解这个问题吗?
非常感谢。