我正在编写一个文件缓存服务器来保存Web服务器的静态文件副本。只要Web服务器中的某个线程需要一个静态文件,它就会打开一个到缓存服务器的套接字连接,并向它发送socket.share()
的结果+它想要的文件名。缓存服务器使用socket.share
的结果通过socket.fromshare
访问http客户端,并发送静态文件的内容。然后它关闭它的http客户端套接字的副本,以及线程与它的连接。
我想知道使用socket.detach
代替socket.close
会自动提高效果吗? socket.detach
的文档说明了这一点:
将套接字对象置于关闭状态,而不实际关闭基础文件描述符。返回文件描述符,可以重复用于其他目的。
当缓存服务器创建新套接字时,是否必须以某种方式显式使用返回的文件描述符,或者socket
模块是否知道现有的可重用文件描述符?
答案 0 :(得分:0)
socket.detach
仅清除PySocketSockObject
结构上的文件描述符字段。它不以任何方式存储值,以便模块的其余部分可以知道文件描述符可以重用。
答案 1 :(得分:0)
我不确定原因:
socket.share
和你说你已经在线程了。 Web服务器将受IO限制。你的大部分时间都花在了:
在进行改进之前,您应 对您的代码进行概要分析。什么是实际持股量?建立连接?从磁盘读取?寄回客户端?
除非您已经做了一些巨大的改进,否则我非常确定实际的TCP / IP协商比从磁盘获取信息要快几个数量级更快