如何将多个参数添加到 concurrent.futures 映射函数?

问题描述 投票:0回答:1

我正在学习在 python 中使用 concurrent.futures,我想测试的函数有两个参数。我尝试使用“部分”来包含第二个参数,但没有用。我怎样才能让它发挥作用?

下面的代码对我有用:

def check_proxy(proxy,index):
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--proxy-server=%s' % proxy)
    driver = webdriver.Chrome(options=chrome_options)
    try:
        driver.get("https://ip.oxylabs.io/")
        return (f'{index}- {driver.find_element(By.TAG_NAME, "pre").text}')
    except:
       return (f"{index} - Bad Proxy: {proxy} was removed from list")
   finally:
       driver.quit()

def main():
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
       list = []
        for x in range (len(proxies)):
            futures = executor.submit(check_proxy,proxies[x],x)
            list.append(futures)
        for future in concurrent.futures.as_completed(list):
            print (future.result()

 if __name__ == "__main__":
   main()

这段代码的结果是我所期望的。显示一切正常的代理列表。

2- 104.233.XX.YY
1- 140.99.XXX.XX
0- 104.227.XX.YY
3- 45.72.XX.YYY
4- 104.227.XX.YYY

当我尝试使用 executor.map 并添加部分函数以包含第二个参数时,我的结果都是错误的。

def main():
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
        results = executor.map(partial(check_proxy,proxies),range(1,len(proxies)))
    for result in results:
        print (result)

现在得到的结果是这些:

1 - Bad Proxy: ['104.227.XX.YY:ZZZZ', '140.99.XXX.YY:ZZZZ', '104.233.XX.YY:ZZZZ', '45.72.XX.YYY:ZZZZ', '104.227.XX.YYY:ZZZZ'] was removed from list for Access Denied
2 - Bad Proxy: ['104.227.XX.YY:ZZZZ', '140.99.XXX.YY:ZZZZ', '104.233.XX.YY:ZZZZ', '45.72.XX.YYY:ZZZZ', '104.227.XX.YYY:ZZZZ'] was removed from list for Access Denied
3 - Bad Proxy: ['104.227.XX.YY:ZZZZ', '140.99.XXX.YY:ZZZZ', '104.233.XX.YY:ZZZZ', '45.72.XX.YYY:ZZZZ', '104.227.XX.YYY:ZZZZ'] was removed from list for Access Denied
4 - Bad Proxy: ['104.227.XX.YY:ZZZZ', '140.99.XXX.YY:ZZZZ', '104.233.XX.YY:ZZZZ', '45.72.XX.YYY:ZZZZ', '104.227.XX.YYY:ZZZZ'] was removed from list for Access Denied
5 - Bad Proxy: ['104.227.XX.YY:ZZZZ', '140.99.XXX.YY:ZZZZ', '104.233.XX.YY:ZZZZ', '45.72.XX.YYY:ZZZZ', '104.227.XX.YYY:ZZZZ'] was removed from list for Access Denied

为什么会这样,我该如何解决?有没有办法使用

executor.map(partial)
将更多参数包含到我的函数中并仍然使它工作?或者使用
executor.map
并将多个参数传递给函数的任何其他方式

你能帮我理解为什么我会看到这个结果吗?我不明白部分是如何使功能同时测试所有代理的。

python concurrent.futures
1个回答
0
投票

我不认为你想在这里使用部分,而只是:

indicies = range(1, len(proxies) + 1)
results = executor.map(check_proxy, proxies, indicies)
© www.soinside.com 2019 - 2024. All rights reserved.