按照手册实例结合自己想写的一个多访问的脚本,有了以下的代码.有 2 种写法的: 第 1 种速度快很多,但是出现多个 print 输出,实在想不出怎么冒出来的.是线程出错还是线程多余的.我开的 5 个线程,print(future_to_url) 对象也是 5 个.但是跑起来就多了出 3 个,而且文字还错乱了.
第 2 种暂时没有发现问题,求指教第一种为何会出现这种问题?
URLS = {'baidu':'http://www.baidu.com',
'sogou':'http://www.sogou.com',
'so':'http://www.so.com',
'youku':'http://www.youku.com',
'qq':'http://www.qq.com'
}
def load_url(s,args):
weburl = args['url']
if args['mark'] == 'baidu':
print(s + "百度访问:" + weburl)
rs = requests.get(weburl)
if args['mark'] == 'so':
print(s + "so:" + weburl)
rs = requests.get(weburl)
if args['mark'] == 'sogou':
print(s + "搜狗访问:" + weburl)
rs = requests.get(weburl)
if args['mark'] == 'qq':
print(s + "腾讯访问:" + weburl)
rs = requests.get(weburl)
if args['mark'] == 'youku':
print(s + "优酷访问:" + weburl)
rs = requests.get(weburl)
return str(rs.status_code)
title = '速度与激情'
conData ={'year':'2015','actor':'范·迪塞尔,保罗·沃克,杰森·斯坦森,米歇尔·罗德里格兹','subname':'狂野时速 7'}
aa = []
start = datetime.datetime.now()
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
# --------------------------------第 1 种.写法----------------------------------------------#
future_to_url = {executor.submit(load_url,title,conData): (conData['mark'] ,conData['url']) for conData['mark'],conData['url'] in URLS.items()}
print(future_to_url)
for future in concurrent.futures.as_completed(future_to_url):
url = future_to_url[future] #调用对应的 URL
try:
data = future.result() #获得函数返回的值
except Exception as exc:
print('%r generated an exception: %s' % (conData['url'], exc))#调试异常错误
else:
aa.append(data)
#--------------------------------第 2 种.写法----------------------------------------------#
# for conData['mark'],conData['url'] in URLS.items():
# future = executor.submit(load_url, title, conData)
# print(future)
# try:
# data = future.result() #获得函数返回的值
# except Exception as exc:
# print('%r generated an exception: %s' % (conData['url'], exc))#调试异常错误
# else:
# aa.append(data)
executor.shutdown(wait=True)
end = datetime.datetime.now()
print (end-start)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.