python并发编程之进程池,线程池,协程
2018-04-13 11:06
525 查看
需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池。其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加锁吧 那么我们就用QUEUE,这样还解决了自动加锁的问题 由Queue延伸出的一个点也非常重要的概念。以后写程序也会用到 这个思想。就是生产者与消费者问题
一、Python标准模块--concurrent.futures(并发未来)
concurent.future模块需要了解的 1.concurent.future模块是用来创建并行的任务,提供了更高级别的接口, 为了异步执行调用 2.concurent.future这个模块用起来非常方便,它的接口也封装的非常简单 3.concurent.future模块既可以实现进程池,也可以实现线程池 4.模块导入进程池和线程池 from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor 还可以导入一个Executor,但是你别这样导,这个类是一个抽象类 抽象类的目的是规范他的子类必须有某种方法(并且抽象类的方法必须实现),但是抽象类不能被实例化 5. p = ProcessPoolExecutor(max_works)对于进程池如果不写max_works:默认的是cpu的数目,默认是4个 p = ThreadPoolExecutor(max_works)对于线程池如果不写max_works:默认的是cpu的数目*5 6.如果是进程池,得到的结果如果是一个对象。我们得用一个.get()方法得到结果 但是现在用了concurent.future模块,我们可以用obj.result方法 p.submit(task,i) #相当于apply_async异步方法 p.shutdown() #默认有个参数wite=True (相当于close和join)
那么什么是线程池呢?我们来了解一下
二、线程池
进程池:就是在一个进程内控制一定个数的线程 基于concurent.future模块的进程池和线程池 (他们的同步执行和异步执行是一样的)
#!usr/bin/env python # -*- coding:utf-8 -*- from multiprocessing import Process from gevent import monkey;monkey.patch_all() from socket import * def client(ip,duankou): client = socket(AF_INET, SOCK_STREAM) client.connect((ip,duankou)) while True: client.send('hello'.encode('utf-8')) data = client.recv(1024) print(data.decode('utf-8')) if __name__ == '__main__': for i in range(100): p = Process(target=client,args=(('127.0.0.1',8081))) p.start()
客户端开了100个进程
相关文章推荐
- Python并发编程之线程池/进程池--concurrent.futures模块
- Python并发编程之线程池/进程池--concurrent.futures模块
- python并发编程之进程池,线程池,协程
- Python学习-并发编程之进程池
- Python基础学习(5)网络编程socket、文件上传、粘包问题、socketserver、IO多路复用、线程与进程、进程池、线程池、上下文管理、协程
- Python学习-并发编程之线程池
- python并发编程之多进程2-------------数据共享及进程池和回调函数
- Python并发编程的几篇文章
- 【Java并发编程】7、线程池
- 理解Python并发编程-PoolExecutor篇
- 进程池与线程池在数据仓库迁移中的多并发应用
- Python并发编程-进程
- 理解Python并发编程-PoolExecutor篇
- python的并发和异步编程实例
- Java并发编程札记-(六)JUC线程池-02ThreadPoolExecutor实现原理
- java并发编程--线程池
- 多进程并发编程----基于高级的预先创建进程池(accept不上锁)的模型
- Python并发编程之进程
- 使用Python进行并发编程
- 并发编程实战学习笔记(六)——线程池的使用