【python爬虫】Python线程池使用

线程池代码示例: 原则:线程池处理阻塞并且耗时的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 线程池
import time
# 导入线程池对应的类
from multiprocessing import Pool


# 单线程串行爬虫
def get_data(url):
print("正在下载%s" % url)
time.sleep(2)
print("%s 下载完成" % url)
return url + " done"


if __name__ == "__main__":
urls = ['12', '33', '212']
start_time = time.time()
# 实例化一个线程对象 参数为线程池开辟的线程数目
pool = Pool(4)
# 通过pool.map方法使用线程池,
# 第一个参数为函数变量,第二个为可迭代对象,
# pool会把可迭代对象中的每一个交给线程池中的线程去执行,
# map方法的返回值就是函数对象的返回值组成的数组
ans_list = pool.map(get_data, urls)
# 调用后必须关闭线程池,释放资源并且回到主线程,否则不会退出
pool.close()
pool.join()
print(ans_list) # ['12 done', '33 done', '212 done']
end_time = time.time()
print("耗时:%.2f second" % (end_time - start_time)) # 耗时:2 second