concurrent包

concurrent.futrues模块

3.2版本引入

异步并行任务模块,提供一个高级的异步可执行的便利接口.

提供了两个池执行器

ThreadPoolExecutor异步调用的线程池的Executor

ProcessPoolExecutor异步调用的进程池的Executor

ThreadPoolExecutor对象

首先需要定义一个池的执行器对象,Executor类子类对象

方法 含义
ThreadPoolExecutor(max_workers= 1) 池中最多创建max_workers个线程的池类同时异步执行,返回Executor实例
submit(fn,*args,**kwargs) 异步提交执行的函数及其参数,返回Future实例
shutdown(wait = True) 清理池
  1. from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
  2. import time
  3. # ProcessPoolExecutor(5) # 5代表只能开启5个进程
  4. # ProcessPoolExecutor() # 默认以CPU的个数限制进程数
  5. pool = ThreadPoolExecutor(5) # 5代表只能开启5个线程
  6. # ThreadPoolExecutor() # 默认以CPU个数 * 5 限制线程数
  7. # t = Tread() # 异步提交
  8. # t.start(0)

Future类

方法 含义
result(timeout=None) 可以查看调用函数的返回值结果,tiime未none,一直等待返回;timeout设置到期,抛出concurrent.futures.TimeError异常
done() 如果调用被成功的取消或者执行完成,返回True
cancelled() 如果调用被成功的取消,返回True
result() 如果正在运行且不能被取消,返回True
cancel() 尝试取消调用,如果已经执行且不能取消放回false;否则返回True
exception(timeout= None) 取返回的异常,timeout为None,一直等待返回;timeout设置到期,抛出concurrent.futures.TimeoutError异常
  1. #pip3 install gevent
  2. from gevent import monkey
  3. monkey.patch_all() # 可以监听该程序下所有的IO操作
  4. import time
  5. from gevent import spawn, joinall # 用于做切换 + 保存状态
  6. def func1():
  7. print('1')
  8. # IO操作
  9. time.sleep(1)
  10. def func2():
  11. print('2')
  12. time.sleep(3)
  13. def func3():
  14. print('3')
  15. time.sleep(5)
  16. start_time = time.time()
  17. s1 = spawn(func1)
  18. s2 = spawn(func2)
  19. s3 = spawn(func3)
  20. # s2.join() # 发送信号,相当于等待自己 (在单线程的情况下)
  21. # s1.join()
  22. # s3.join()
  23. # 必须传序列类型
  24. joinall([s1, s2, s3])
  25. end_time = time.time()
  26. print(end_time - start_time)

ProcessPoolExecutor对象

跟线程方法一样,就是使用多进程完成.

支持上下文管理

concurrent.futrues.ProcessPoolExecutor继承自concurrent.futrues.base.Executor,

支持上下文管理,可以使用with语句

回调函数

将一个函数的返回值直接传递给另一个函数

  1. # 回调函数
  2. def call_back(res):
  3. print(type(res))
  4. # 注意: 赋值操作不要与接收的res同名
  5. res2 = res.result()
  6. print(res2)
  7. for line in range(5):
  8. pool.submit(task, 1).add_done_callback(call_back)
  9. # 会让所有线程池的任务结束后,才往下执行代码
  10. # pool.shutdown()
  11. print('hello')

总结

这个库统一了线程池,进程池的调用,简化了编程

唯一缺点:无法设置线程名称,无所吊谓

concurrent模块的更多相关文章

  1. Python程序中的线程操作(线程池)-concurrent模块

    目录 Python程序中的线程操作(线程池)-concurrent模块 一.Python标准模块--concurrent.futures 二.介绍 三.基本方法 四.ProcessPoolExecut ...

  2. Python程序中的线程操作-concurrent模块

    目录 一.Python标准模块--concurrent.futures 二.介绍 三.基本方法 四.ProcessPoolExecutor 五.ThreadPoolExecutor 六.map的用法 ...

  3. Python开发【模块】:Concurrent

    concurrent 模块 回顾: 对于python来说,作为解释型语言,Python的解释器必须做到既安全又高效.我们都知道多线程编程会遇到的问题,解释器要留意的是避免在不同的线程操作内部共享的数据 ...

  4. python并发模块之concurrent.futures(一)

    Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threadin ...

  5. python的并发模块concurrent

    Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threadin ...

  6. Haskell语言学习笔记(84)Concurrent

    Control.Concurrent Prelude> import Control.Concurrent Prelude Control.Concurrent> Control.Conc ...

  7. python:常用模块 知识整理

    time模块 time.time() # 时间戳:1487130156.419527 time.strftime("%Y-%m-%d %X") #格式化的时间字符串:'2017-0 ...

  8. Concurrent.Thread.js

    (function(){ if ( !this.Data || (typeof this.Data != 'object' && typeof this.Data != 'functi ...

  9. 使用express4.X + jade + mongoose + underscore搭建个人电影网站

    (-。-;), 周末过得真是快啊,  很久以前就看到imooc上有个搭建个人电影网站一期 ,二期的视频, 这两周宅家里撸玩没事干, 我也学着搭了一个, 这些东西都是基础, 只要花点时间很好学的, no ...

随机推荐

  1. 2019Python学习路线图

  2. HBase入门实例: Table中Family和Qualifier的关系与区别

    Table中Family和Qualifier的关系与区别 就像用MySQL一样,我们要做的是表设计,MySQL中的表,行,列的在HBase已经有所区别了,在HBase中主要是Table和Family和 ...

  3. python numpy.shape 和 numpy.reshape函数

    导入numpy模块   from numpy import *   import numpy as np ############################################### ...

  4. Django定义全局变量

    定义全局变量,在项目的任何位置都可以获取到变量的值 在include App=>include文件夹下=>context_processors.py 里定义需要获取的变量 #!/usr/b ...

  5. openldap 2.4 centos7 常用配置

    新版的openldap弃用了sldap.conf配置文件,引入一种动态配置,所以尽量不要直接修改配文件 如果直接修改了配置文件可以用slaptest -u命令检查 1.安装openldap,可能需要e ...

  6. 更好用的集群限流功能,Sentinel 发布 v1.4.2

    摘要: 感谢 Sentinel 社区的贡献者们 ️ Sentinel 发布 v1.4.2 正式发布,该版本主要变更如下: 特性/功能改进 新增 Zuul 1.x 适配模块(sentinel-zuul- ...

  7. Unknown command: crawl

    Use "scrapy" to see available commands 1.使用命令行方式cmd,是因为没有cd到项目的根目录,crawl会去搜索cmd目录下的scrapy. ...

  8. 使用原生ajax及其简单封装

    原生ajax配置详解 // 原生ajax // 1. 创建ajax对象 if(window.XMLHttpRequest){ // // IE7+, Firefox, Chrome, Opera, S ...

  9. git图形化

    在windows下安装git中文版客户端并连接gitlab 转载自:https://blog.whsir.com/post-1801.html 下载git Windows客户端 git客户端下载地址: ...

  10. 文本流向 layout-flow

    作用与语法 文本流向layout-flow用来定义网页中的文本流向方式. 即排列方式,主要有两个属性,分别是horizonta (水平的) 和vertical-ideographic (垂直的). 文 ...