Python Socks5代理线程
我们正在开发一个源代码。但我们有个问题。 我们正在使用套接字和线程库。 但当太多用户(约200个连接)将连接到服务器时,我们会出现以下错误: select()中的filedescriptor超出范围 在这方面:Python Socks5代理线程,python,multithreading,sockets,proxy,Python,Multithreading,Sockets,Proxy,我们正在开发一个源代码。但我们有个问题。 我们正在使用套接字和线程库。 但当太多用户(约200个连接)将连接到服务器时,我们会出现以下错误: select()中的filedescriptor超出范围 在这方面: try: reader, _, _ = select.select([socket_src, socket_dst], [], [], 1) except select.error as err: error("Select failed", err) 但是cpu使用率
try:
reader, _, _ = select.select([socket_src, socket_dst], [], [], 1)
except select.error as err:
error("Select failed", err)
但是cpu使用率只有3%!
服务器容量过大,但此错误导致脚本仍在运行。
解决办法是什么?
我们应该关闭threade?还是另一种解决方案?
谢谢你的帮助。
祝您玩得愉快。尝试增加操作系统中打开文件描述符的最大数量,例如在Ubuntu中,您可以使用ulimit或更好的prlimit。你可以为你的操作系统找到替代品。这与CPU使用率无关。这是对可在select中使用的最大FD值的硬限制。可能是Python限制,而不是OS限制@GauravDhiman它也与FD限制无关。简短的互联网搜索表明python的
select
有1024个描述符限制。我建议您重写代码以使用其他内容(例如poll
或epoll
)。另外,请确保在不再使用文件描述符时立即关闭它们(垃圾收集描述符无效,因为GC可能不会足够快地销毁它们以跟上客户端连接)。@user207421,我可能遗漏了一些东西,但你能告诉我为什么它与FD限制无关吗?你能给我发送与poll相同的命令吗@高拉夫·迪曼