Python - 是否可以为每个多线程运行不同的代理(auth)?

时间:2017-10-29 15:17:27

标签: python multithreading proxy

所以我想知道它是否可以从一个文件(带代理)运行,并将它添加到我正在做的每个线程的每个配置文件Json。在这种情况下,如果我确实有等5个配置文件,那么现在每个配置文件将获得每个线程:ETC

def main():

    log("Loaded # of profiles: " + Fore.CYAN + str(configLen) + Fore.RESET)
    mylocale = config['event']['locale']
    locale = 'en_%s' % mylocale
    threads = []
    for i in range(configLen):
        t = threading.Thread(target=start, args=(str(i),locale,))
        threads.append(t)
        t.start()

但是我试着加起来:

t = threading.Thread(target=start, args=(str(i),locale,), proxies=proxies)

然后我意识到我需要做一些像

这样的事情
proxies = config['test']['profile_' + str(thread)]['proxy']

proxies = {
    'https': 'https://' + proxies
}

实际上能够让代理工作,但我不确定这是否可行。你们有什么建议,甚至可能这样做?

修改

proxies = {'http': "http://username:password@IP:PORT", 
           'https': "http://username:password@IP:PORT", 
}

threads = []
for i in range(configLen):
    t = threading.Thread(target=start, args=(str(i),locale,), proxies=proxies)
    threads.append(t)
    t.start()

我这样做了但是它给了我一个错误说:

  

TypeError: init ()得到了一个意外的关键字参数' proxies'

1 个答案:

答案 0 :(得分:0)

您可以使用单独的方法来确定代理。这样,你的每个线程都可以调用该方法,并传递所有参数 - 以确定代理。

修改

您可以将代理作为参数传递,并将其置于start callable中。让我们在你写的时候有代理:

proxies = {'http': 'proxy1', 'https': 'proxy2', 'local': 'proxy3'}

你可以:

t = threading.Thread(target=start, args=(str(i),locale,proxies['https']))

所以你的start

def start(idx, locale, proxy):
    # ...
    print proxy
    # ...

应该有用。