from multiprocessing.dummy import Pool
from threading import Thread
from multiprocessing import Process
import time
urls=['www.data1.com','www.data2.com','www.data3.com','www.data4.com','www.data5.com','www.data6.com']
def getreuques(url):
print('正在处理网址%s'%url)
time.sleep(2)
if __name__ == '__main__':
#线程池执行
start=time.time()
# pool=Pool(3) #创建了一个线程池,线程池里有3个线程重复使用
# pool.map(getreuques,urls) #map里传的参数第一个位函数名,第二个为可迭代对象!
# print('总耗时%s'%(time.time()-start))
#创建线程执行 如果列表里处理的数据量比较大的话,就会创建很多的线程,造成资源的巨大开销,此时用线程池的话就会节省比较多的开销,线程并不是
#越多越好,因为创建线程是需要消耗资源的,Python里多线程只能实现并发不能实现并行。因为python解释器的GIL全局锁的原因,
# li=[]
# for i in urls:
# t=Thread(target=getreuques,args=(i,))
# t.start()
# li.append(t)
# for x in li:
# x.join()
# print('总耗时%s'%(time.time()-start))
#进程的开销要大于线程,Python里大多会使用线程来解决并发,处理大量的数据计算我们用多进程,处理大量io操作我们用多线程
# li=[]
# for x in urls:
# p1=Process(target=getreuques,args=(x,))
# p1.start()
# li.append(p1)
# for y in li:
# y.join()
# print('总耗时%s'%(time.time()-start))