python并发编程之进程池,线程池,协程
2017-09-01 16:40
459 查看
需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池。其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加锁吧 那么我们就用QUEUE,这样还解决了自动加锁的问题 由Queue延伸出的一个点也非常重要的概念。以后写程序也会用到 这个思想。就是生产者与消费者问题
[b]一、Python标准模块--concurrent.futures(并发未来)[/b]
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)
那么什么是线程池呢?我们来了解一下
[b]二、线程池[/b]
进程池:就是在一个进程内控制一定个数的线程 基于concurent.future模块的进程池和线程池 (他们的同步执行和异步执行是一样的)
yield功能示例1
#!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并发编程之进程池,线程池,协程
- Python并发编程之线程池/进程池--concurrent.futures模块
- Python学习-并发编程之进程池
- Python学习-并发编程之线程池
- Python基础学习(5)网络编程socket、文件上传、粘包问题、socketserver、IO多路复用、线程与进程、进程池、线程池、上下文管理、协程
- python并发编程之多进程2-------------数据共享及进程池和回调函数
- Linux网络编程【四】:进程池、线程池原理及简单线程池源码分析
- 《Java 7 并发编程指南》学习概要 (5) 线程池
- Python并发编程协程(Coroutine)之Gevent
- python并发编程补充
- Python并发编程之进程
- 【Java并发编程】21、线程池ThreadPoolExecutor源码解析
- python 并发编程
- Java并发编程:线程池的使用
- Java并发编程与技术内幕:线程池深入理解
- Python并发编程__多进程
- python并发编程之多进程1-----------互斥锁与进程间的通信
- Java并发编程:线程池的使用
- Java并发编程:线程池创建及源码分析