非常感谢提前!
任务描述:我想使用Python来收集免费的https代理服务器信息并进行测试。代码需要几分钟才能运行(大约100个代理服务器要测试),我知道多处理可以显着提高执行速度,但是,我尝试了几天但没有运气......似乎所有子流程都在重复任务,而不是一起做。
需要帮助......
代码:
import requests
import re
import telnetlib
import multiprocessing
def run(info1, info2):
try:
tn = telnetlib.Telnet(info1, port= info2, timeout= 2)
except:
print('not working !')
else:
proxy_server = 'http://' + info1 + ':' + info2
print(proxy_server)
if __name__=='__main__':
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
html = requests.get('https://www.sslproxies.org', headers=headers, allow_redirects=False)
pattern = re.compile('<td>(\d.*?)</td><td>(\d+)</td>', re.S)
items = re.findall(pattern, html.text)
for item in items:
for i in range(5):
p = multiprocessing.Process(target=run(item[0], item[1]), args=('msc%s' % i,))
p.start()
“for i in range(5)”产生了相同的过程5次,创造了重复。这可以通过删除它并以更简单的方式创建过程来实现。
for item in items:
p = multiprocessing.Process(target=run, args=(item[0], item[1],))
p.start()
您的任务基本上是IO绑定的(您从许多远程服务器请求信息),因此您需要“同时”请求所有服务器并等待他们的回复。这是典型的用例,您应该使用Python等语言的并发功能。不知何故,多处理是实现并发的一种方法(严格来说这样的断言是不正确的)但是如果你需要请求数千台服务器会发生什么?创建数以千计的流程并不是一个好方法。
我推荐这篇文章:qazxsw poi
它将帮助您以非常有效的方式实现您想要做的事情。