【问题标题】:Python is a bit slow. How can I speed up this code?Python有点慢。如何加快此代码的速度?
【发布时间】:2011-08-06 08:01:55
【问题描述】:

Python 让我很失望。我搜索了端口扫描的代码,找到了这个。运行它。我用来扫描的程序。根据python代码,它非常快。代码如下。
你能帮我加速我的代码吗?我能得到什么?

#!/usr/bin/env python  
from socket import *   

if __name__ == '__main__':  
    target = raw_input('Enter host to scan: ')  
    targetIP = gethostbyname(target)  
    print 'Starting scan on host ', targetIP  

    #scan reserved ports  
    for i in range(20, 1025):  
        s = socket(AF_INET, SOCK_STREAM)  

        result = s.connect_ex((targetIP, i))  

        if(result == 0) :  
            print 'Port %d: OPEN' % (i,)  
        s.close()

【问题讨论】:

    标签: python performance


    【解决方案1】:

    您正在一个接一个地打开一千个连接。这必须花费至少 1000 倍于服务器的往返时间。 Python与它无关,这只是网络的一个非常基本的事实。

    您可以做的是使用线程或基于事件的框架(如 twisted)并行打开连接。

    【讨论】:

      【解决方案2】:

      Python 按照大多数标准来说都很慢。但是对于大多数代码来说,它并没有那么慢。该脚本所花费的时间并没有花在 Python 解释器中,而是花在等待 I/O 完成上。尽管如此,网络 I/O。您正在创建一千个连接并对每个连接进行一些嗅探,并且一次只进行一个连接 - 无论您使用哪种语言编写它都需要很长时间。

      【讨论】:

        【解决方案3】:

        嗯,这不是 Python 慢。只是您试图同时连接到 1000 个端口。

        也许你可以让它们并行连接(即连接是非阻塞的),但我认为你应该在这样做之前了解更多关于网络编程的知识。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-24
          • 1970-01-01
          • 2014-10-07
          • 1970-01-01
          • 2012-03-07
          • 2014-01-02
          相关资源
          最近更新 更多