【问题标题】:Python on Snow Leopard, how to open >255 sockets?Snow Leopard上的Python,如何打开> 255个套接字?
【发布时间】:2009-09-02 06:44:06
【问题描述】:

考虑这段代码:

import socket
store = []
scount = 0
while True:
    scount+=1
    print "Creating socket %d" % (scount)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    store.append(s)

给出以下结果:

Creating socket 1
Creating socket 2
...
Creating socket 253
Creating socket 254
Traceback (most recent call last):
  File "test_sockets.py", line 9, in <module>
  File     "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/socket.py", line 159, in __init__
socket.error: (24, 'Too many open files')

检查 sysctl 中允许的打开文件数给出:

$ sysctl -A |grep maxfiles
kern.maxfiles = 12288
kern.maxfilesperproc = 10240
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

这比我可以成功打开的 253 个套接字要多...

有人可以帮我把这个数字增加到 500 以上吗?我正在尝试使用真实套接字(要求)模拟对等网络,只有 50 个模拟节点和 5 个传出连接和 5 个传入连接,将给出 500 个所需套接字的数量。

顺便说一句,在 Linux 下运行同样的代码给了我大约 1020 个套接字,这是我更喜欢的方式。

【问题讨论】:

    标签: python sockets macos


    【解决方案1】:

    您可以使用ulimit 增加可用套接字。看起来 1200 是 bash 中非 root 用户的最大值。我可以用 zsh 达到 10240。

    $ ulimit -n 1200
    $ python sockets
    ....
    Creating socket 1197
    Creating socket 1198
    Traceback (most recent call last):
      File "sockets", line 7, in <module>
      File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 182, in __init__
    socket.error: [Errno 24] Too many open files
    

    【讨论】:

      【解决方案2】:

      您是否从 Snow Leopard 安装盘安装了 XCode 和开发人员工具?我可以打开比你更多的端口:

      Creating socket 1
      Creating socket 2
      ...
      Creating socket 7161
      Creating socket 7162
      Creating socket 7163
      Creating socket 7164
      Creating socket 7165
      Creating socket 7166
      Traceback (most recent call last):
        File "socket-test.py", line 7, in <module>
        File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/socket.py", line 159, in __init__
      socket.error: (24, 'Too many open files')
      

      sysctl 向我显示了比您的输出显示更多的信息(即使使用 grep),但是您的四行与我的完全匹配,所以我能想到的只是需要磁盘上的开发工具提供的东西。

      【讨论】:

      • 我想我确实安装了 Snow Leopard 附带的 Xcode。它显示版本 3.2,64 位,Xcode IDE:1610.0,Xcode Core:1608.0。你能告诉我你电脑上的“which python”是什么意思吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 2010-11-24
      • 2011-01-18
      • 2010-12-22
      • 1970-01-01
      相关资源
      最近更新 更多