2019-08-19 来源:编玩边学
如果我们要爬取多个网站的一些数据
单线程,单进程时
只使用for循环一个个的遍历URL并读取响应,使用IPython的%%time函数统计消耗的时间。
import urllib.request
form concurrent.futures import ThreadPoolExecutor
urls=[
“https://www.codepku.com/”,
“https://www.codepku.com/informations/notice”,
“https://www.codepku.com/informations/event”,
“https://www.codepku.com/informations/offline”,
“https://www.codepku.com/informations/information”,
“https://www.codepku.com/course”,
“https://www.codepku.com/course/enlightenment”,
“https://www.codepku.com/teach”,
“http://kids.codepku.com/”,
“http://kids.codepku.com/work/list”,
“http://kids.codepku.com/hacker/tech”,
“http://kids.codepku.com/ranking/list”,
“http://kids.codepku.com/match”,
]
%%time
results=[]
for url in urls:
with urllib.request.urlopen(rul)as src:
results.append(src)
读取这些网页大概需要12秒钟。
多线程,比如4个线程,%%time下面的代码改为
with ThreadPoolExecutor(4)as executor:
results=executor.map(rullib.request.urlopen.urls)
这时从12秒变成3秒多,接近4秒了。
单进程,计算100万以内所有质数的和。
def if_prime(x):
i
f x<=1:
return 0
elif x<=3:
return x
elif x%2==0 or x%3==0:
return 0
i=5
while i**2<=x:
i
f x%i==0 or x%(i+2)==0:
return 0
i
+=6
return x
%%time
answer=0
for i in range(1000000):
answer+=if_prime(i)
耗时3.48秒钟
多进程
from muItiprocessing import Pool
def if_prime(x):
if x<=1:
return 0
elif x<=3:
return x
elif x%2==0 or x%3==0:
return 0
i=5
while i**2<=x:
if x%i==0 or x%(i+2)==0:
return 0
i+=6
return x
%%time
if __name__==‘__main__’:
with Pool(2)as p:
answer=sum(p.map(if_prime.list(range(1000000))))
使用2进程,耗时1.91秒钟
在数据共享、同步方面,多进程是数据共享复杂,需要用IPC,数据是分开的,同步简单。多线程因为共享进程数据,数据共享简单,但同步复杂;在内存、CPU方面,多进程占用内存多,切换复杂,CPU利用率低。多线程占用内存少,切换简单,CPU利用率高;在创建销毁、切换方面,多进程创建销毁、切换复杂,速度慢。多线程创建销毁、切换简单,速度很快;在编程、调试方面,多进程编程和调试都简单。多线程编程和调试都复杂;可靠性方面,多进程间不会互相影响。多线程中的一个线程挂掉将导致整个进程挂掉;在分布式方面,多进程适应于多核、多机分布式。多线程适应于多核分布式。
所以如果您想报名少儿编程培训课程,就请点击“少儿编程报名”,填写信息,并领取5G的免费试听课程和学习资料。
关注我们的自媒体
获取更多精彩内容
编玩边学订阅号
编玩边学服务号
编玩边学广东 深圳
1、"编玩边学"上的内容,包括文章、资料、资讯等,本网注明"来源:编玩边学"的,其版权均为"编玩边学"或深圳市编玩边学教育科技有限公司所有,任何公司、媒体、网站或个人未经授权不得转载、链接、转贴或以其他方式使用。已经得到"编玩边学"许可的媒体、网站,在使用时必须注明"来源:编玩边学",违者本网站将依法追究责任。
2、"编玩边学" 未注明"来源:编玩边学"的文章、资料、资讯等均为转载,本网站转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如其他媒体、网站或个人从本网站下载使用,必须保留本网站注明的"稿件来源",并自负版权等法律责任。如擅自篡改为" 来源:编玩边学 " ,本网站将依法追究其法律责任。
3、如果本网所转载内容侵犯了您的权益,请与我们联系team@codepku.com,我们将及时处理。
请输入正确的证书编号
学员姓名:孙兴民
课程:Scratch Level 1
发证日期:2019.08.15