下面是wsgi web server的片段demo
def start_response(status, response_headers, exc_info=None): if exc_info: try: if headers_sent: # Re-raise original exception if headers sent raise exc_info[1].with_traceback(exc_info[2]) finally: exc_info = None # avoid dangling circular ref elif headers_set: raise AssertionError("Headers already set!") headers_set[:] = [status, response_headers] # Note: error checking on the headers should happen here, # *after* the headers are set. That way, if an error # occurs, start_response can only be re-called with # exc_info set. return write
我想问:exc_info = None # avoid dangling circular ref
这里有什么必要这样操作?
这和迷途指针有什么关系吗?
To be able to deal with errors, you need to know that the start_response() callable you have been using throughout this chapter takes an optional third parameter named exc_info, which defaults to None.
exc_info
是在调用start_response
之前就产生的错误异常。
在处理完exc_info
指向的异常后,将exc_info
置为None,即解除引用。
从而避免后续可能出现
的循环引用。
这和迷途指针有什么关系吗?—— 没有半毛钱关系
exc_info 是存放报错信息的,而报错是天生不存在,是后天才会产生,所以 exc_info=None 是天经地义的事情
我不怎么写python,但我觉得copilot chat讲得还可以:
这段代码是Python的WSGI(Web Server Gateway Interface)应用程序的一部分。start_response函数是WSGI应用程序的核心部分,它用于设置HTTP响应的状态和头部。 "avoid dangling circular ref"这句注释是指避免形成悬空的循环引用。在Python中,循环引用是指两个或更多的对象互相引用,形成一个闭环。这可能会导致内存泄漏,因为Python的垃圾收集器无法回收这些对象。 在这段代码中,exc_info是一个包含异常类型、异常值和追踪信息的元组。如果exc_info在函数结束时仍然引用这些对象,那么这些对象就不能被垃圾收集器回收,因为exc_info是一个全局变量,它的生命周期比这些对象长。为了避免这种情况,代码在finally块中将exc_info设置为None,断开了对这些对象的引用,使得它们可以被垃圾收集器回收。这就是"avoid dangling circular ref"的含义
以下Python3.x整数乘法的平均运算时间在1.66s到1.77s之间: 如果将替换为,则需要在和之间。怎么会呢? 另一方面,在Java中则相反:在Java中更快。Java测试链接:为什么在Java中2*(i*i)比2*i*i快? 我运行每个版本的程序10次,以下是结果。
本文向大家介绍python面试题Python2.x和Python3.x的区别,包括了python面试题Python2.x和Python3.x的区别的使用技巧和注意事项,需要的朋友参考一下 下面看下python2.x和python3.x的区别 1.大环境不同 python2.x:源码重复,不规范 python3.x:整合源码,更清晰优美简单 2.默认编码不同 python2.x:默认编
问题内容: 对于我的应用程序,我需要设置一些小部件参数,例如alignment()和其他。但是我无法导入它们(其他PyQt5素材导入没有任何问题)。 使用此代码 我收到以下错误: 并使用此作品: 尽管我有一个可行的解决方案,但我只想导入而不能。另外,为什么不一起工作? 问题答案: 我认为这里的困惑在于PyQt有一个称为的特殊虚拟模块,该模块将 所有内容 导入单个名称空间。这是一个非常有用的功能,但
本文向大家介绍Python3.x中自定义比较函数,包括了Python3.x中自定义比较函数的使用技巧和注意事项,需要的朋友参考一下 在Python3.x的世界里,cmp函数没有了。那么sorted,min,max等需要比较函数作为参数的函数该如何用呢? 以min函数的定义为例,有两种重载形式: 单参数(一个迭代器): 多参数(多个待比较内容): 本文主要讨论key=func参数的使用 。举例说明吧
我在查看sorted_containers的源代码时,惊讶地看到了这一行: 这里的是一个整数。为什么在一个地方使用位移位,而在另一个地方使用乘法?位移位可能比整数除以2快,这似乎是合理的,但为什么不把乘法也换成移位呢?我对以下案例进行了基准测试: (乘以,除法) (shift,shift) (次数,移位) (移位、除法) 以上是问题的原话。丹·盖茨在他的回答中提供了一个极好的解释。 为了完整起见,
我需要依次调用三次subprocess. 发现最后一个没有执行? 在流媒体服务器的控制台上只能看到: aac和mp4的rtmp信息, 看不到live的rtmp连接 参考代码: 问题1:这三个是串行执行的. 如何让他们异步执行 问题2: 上面的示例串行执行, 为什么 mergeVAP没有执行.在命令行上执行是可以执行的