Python系列之进程池与线程池
2018-03-21 18:06
423 查看
在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多,这会对服务端主机带来巨大的压力,甚至于不堪重负而瘫痪,于是我们必须对服务端开启的进程数或线程数加以控制,让机器在一个自己可以承受的范围内运行,这就是进程池或线程池的用途,例如进程池,就是用来存放进程的池子,本质还是基于多进程,只不过是对开启进程的数目加上了限制
进程池
不说了,直接上代码:from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import os,time,random def task(n): print('%s is runing' %os.getpid()) time.sleep(random.randint(1,3)) return n**2 if __name__ == '__main__': executor=ProcessPoolExecutor(max_workers=3) futures=[] for i in range(11): future=executor.submit(task,i) futures.append(future) executor.shutdown(True) print('+++>') for future in futures: print(future.result())
线程池
把ProcessPoolExecutor换成ThreadPoolExecutor,其余用法全部相同
回调函数
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor from multiprocessing import Pool import requests import json import os def get_page(url): print('<进程%s> get %s' %(os.getpid(),url)) respone=requests.get(url) if respone.status_code == 200: return {'url':url,'text':respone.text} def parse_page(res): res=res.result() print('<进程%s> parse %s' %(os.getpid(),res['url'])) parse_res='url:<%s> size:[%s]\n' %(res['url'],len(res['text'])) with open('db.txt','a') as f: f.write(parse_res) if __name__ == '__main__': urls=[ 'https://www.baidu.com', 'https://www.python.org', 'https://www.openstack.org', 'https://help.github.com/', 'http://www.sina.com.cn/' ] p=ProcessPoolExecutor(3) for url in urls: p.submit(get_page,url).add_done_callback(parse_page) #parse_page拿到的是一个future对象obj,需要用obj.result()拿到结果
相关文章推荐
- Python中的进程池和线程池
- python并发编程之进程池,线程池,协程
- Python3之concurrent.futures实现线程池,进程池
- Python 多进程_进程池_多线程_线程池实现比较
- python并发编程之进程池,线程池,协程
- python3下multiprocessing、threading和gevent性能对比----暨进程池、线程池和协程池性能对比
- python自带的线程池和进程池
- python-进程池与线程池,协程
- Python基础学习(5)网络编程socket、文件上传、粘包问题、socketserver、IO多路复用、线程与进程、进程池、线程池、上下文管理、协程
- Python并发编程之线程池/进程池--concurrent.futures模块
- python爬虫之线程池和进程池功能与用法详解
- Python并发编程之线程池/进程池--concurrent.futures模块
- python3下multiprocessing、threading和gevent性能对比----暨进程池、线程池和协程池性能对比
- 在python中使用concurrent.futures实现进程池和线程池
- python3下multiprocessing、threading和gevent性能对比----暨进程池、线程池和协程池性能对比
- python进程池加线程池的一些问题
- python(进程池/线程池)
- Python-线程池模块(threadpool.py)
- CentOS 6 系列 安装 Python2.7+pip