如何解决Windows 10上的多处理问题
我正在尝试使用多处理方法来收集网站列表的首页大小。以下是代码:
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倍。
这是什么错误?有人可以帮忙吗?
预先感谢
Sachin
解决方法
我认为您误解了pool.imap_unordered
的工作方式,将使用sites
中的值之一调用提供的函数,而实际上您完全丢弃了提供的url
并循环访问sites
列表中的所有值。
您应该简单地做
def sitesize(url):
with urllib.request.urlopen(url) as u:
page = u.read()
print(url,len(page))
请参见doc。
,少数问题:
def sitesize(url):
result = {}
for url in sites:
with urllib.request.urlopen(url) as u:
page = u.read()
result[url] = len(page)
return result
- sitesize不返回任何内容->见上文,了解所需内容
- 不需要循环
for result in pool.imap_unordered(sitesize,sites):
->更改为result = pool.map(sitesize,sites)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。