我正在尝试使用多处理收集网站列表的主页大小。代码如下:
import time
from multiprocessing import Pool, TimeoutError
start = time.time()
def sitesize(url):
for url in sites:
with urllib.request.urlopen(url) as u:
page = u.read()
print(url, len(page))
sites = [
'https://www.yahoo.com',
'http://www.cnn.com',
'http://www.python.org',
'http://www.jython.org',
'http://www.pypy.org',
'http://www.perl.org',
'http://www.cisco.com',
'http://www.facebook.com',
'http://www.twitter.com',
'http://arstechnica.com',
'http://www.reuters.com',
'http://www.abcnews.com',
'http://www.cnbc.com',
]
if __name__ == '__main__':
with Pool(processes=4) as pool:
for result in pool.imap_unordered(sitesize, sites):
print(result)
print(f'Time taken : {time.time() - start}')
我有一台运行Python 3.9的Windows 10笔记本电脑。我没有使用venv
此代码进入循环-执行4次,耗时4倍
这里的错误是什么?有人能帮忙吗
提前谢谢
萨钦
我认为您误解了
pool.imap_unordered
的工作原理,提供的函数将使用sites
中的一个值调用,而在您的例子中,您实际上完全放弃了提供的url
并对sites
列表中的所有值进行循环你应该做的很简单
见doc
几个问题:
for result in pool.imap_unordered(sitesize, sites):
&燃气轮机;更改为result = pool.map(sitesize, sites)
相关问题 更多 >
编程相关推荐