【问题标题】:Proxy tester with threading带线程的代理测试器
【发布时间】:2018-10-29 17:30:21
【问题描述】:

我用 Python 编写了一个简单的代理检查器。我有一个问题 - 如何加快速度?我尝试使用队列和线程,但它没有用。 如果可以使用线程库

代码:

import socks

red = "\033[1;31m"
green = "\033[1;32m"
yellow = "\033[1;33m"
blue = "\033[1;34m"
defaultcolor = "\033[0m"

linesinfile = len(open('proxy.txt', 'rU').readlines())

def proxygff():
    global fp
    with open('proxy.txt') as fp:
        pff = fp.readline()
        global cnt
        cnt = 1
        while pff:
            global PROXYIP, PROXYPORT
            PROXYIP, PROXYPORT = pff.split(":")
            pff = fp.readline()
            cnt = cnt + 1
            checkmain()


def savetofile(proxy):
    with open("proxywork.txt", 'a') as file:
        file.write(proxy)


def checkmain():
    try:
        socks.setdefaultproxy(socks.SOCKS5, str(PROXYIP), int(PROXYPORT))
        s = socks.socksocket()
        s.settimeout(1)
        s.connect(("google.com", 80))
        print blue + "Proxy working! " + green + str(cnt) + defaultcolor + "/" + green + str(linesinfile)
        proxy = PROXYIP + ":" + PROXYPORT
        savetofile(proxy)
        s.close()
    except:
        print red + "Proxy not working! " + green + str(cnt) + defaultcolor + "/" + green + str(linesinfile)


proxygff()

用 Python 2.7 编写

【问题讨论】:

  • 引用迈克尔杰克逊的优化:“规则 1:不要这样做。规则 2(仅适用于专家)。不要这样做 - 也就是说,直到你完全清楚并且未优化的解决方案。” -- en.wikiquote.org/wiki/Michael_A._Jackson 如果您必须继续优化,请先获取分析器并测量您的代码花费时间的位置。

标签: python multithreading python-2.7


【解决方案1】:

Python 的多线程只有在您创建到google.com 的连接并等待它们的响应时才会为您提供帮助。由于GIL,Python 解释器一次只运行一个线程。您可以使用 asyncio 模块(Python >= 3.4)做同样的事情(避免 IO 等待)。而且您必须重写代码,因为您为所有打开的套接字全局设置了默认代理 socks.setdefaultproxy

【讨论】:

    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 2023-03-13
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多