立即学习:https://edu.csdn.net/course/play/24458/296452?utm_source=blogtoedu

1.知识点:(详细见代码注释)

1)同步调用:

res1 = pool.submit(ju,'john1').result()

2)异步调用

pool.submit(ju,'john1')

3)二者区别

异步调用:只是提交了任务即可,不会在原地等待结果,马上运行下面的代码
同步调用:提交完任务后,在原地等待结果,等到结果后再执行后面的代码,代码运行的效果呈串行

4)异步回调机制

#回调机制:异步调用不会等待结果,但是也可获得结果,这里通过回调机制,来获得一个concurrent.futures对象,需要通过.result()来获得数据

5)同步与阻塞的区别

同步调用不管是I/O还是计算密集型都需要等待,而阻塞只有在I/O情况下才会发生

2.同步调用:同步调用不管是I/O还是计算密集型都需要等待,而阻塞只有在I/O情况下才会发生

#同步与异步调用都是提交任务的一种方式,以举重最例#同步调用:提交完任务后,在原地等待结果,等到结果后再执行后面的代码,代码运行的效果呈串行
from concurrent.futures import ProcessPoolExecutor
import time,random#创建函数模拟举重的任务
def ju(name):print('%s is juing'%name)#举重的时间time.sleep(random.randint(2,3))#举重的重量res = random.randint(4,8)return {'name':name,'res':res}#创建函数模拟提交举重结果的事件
def weight(response):name = response['name']size = response['res']print('%s 举重的重量是《%s》kg'%(name,size))if __name__ == '__main__':#创建进程池pool = ProcessPoolExecutor(5)#提交任务,此处使用同步调用result(),得到函数返回的结果res1 = pool.submit(ju,'john1').result()weight(res1)res2 = pool.submit(ju,'john2').result()weight(res2)res3 = pool.submit(ju,'john3').result()weight(res3)

同步调用结果

X:\Users\13711\AppData\Local\Programs\Python\Python37\python.exe C:/Users/jinlin/Desktop/python_further_study/并发编程/异步调用与回调机制.py
john1 is juing
john1 举重的重量是《7》kg
john2 is juing
john2 举重的重量是《8》kg
john3 is juing
john3 举重的重量是《7》kg进程已结束,退出代码0

2.异步调用

#异步调用:只是提交了任务即可,不会在原地等待结果,马上运行下面的代码
#回调机制:异步调用不会等待结果,但是也可获得结果,这里通过回调机制,来获得一个concurrent.futures对象,需要通过.result()来获得数据
from concurrent.futures import ProcessPoolExecutor
import time,random#创建函数模拟举重的任务
def ju(name):print('%s is juing'%name)#举重的时间time.sleep(random.randint(2,3))#举重的重量res = random.randint(4,8)return {'name':name,'res':res}#创建函数模拟提交举重结果的事件
def weight(response):response = response.result()name = response['name']size = response['res']print('%s 举重的重量是《%s》kg'%(name,size))if __name__ == '__main__':#创建进程池pool = ProcessPoolExecutor(5)#提交任务,此处使用异步调用,不得到函数返回的结果,使用回调函数add_done_callback(回调函数)来得到一个对象pool.submit(ju,'john1').add_done_callback(weight)pool.submit(ju,'john2').add_done_callback(weight)pool.submit(ju,'john3').add_done_callback(weight)

异步调用的结果

X:\Users\13711\AppData\Local\Programs\Python\Python37\python.exe C:/Users/jinlin/Desktop/python_further_study/并发编程/异步调用与回调机制.py
john1 is juing
john2 is juing
john3 is juing
john1 举重的重量是《5》kg
john2 举重的重量是《4》kg
john3 举重的重量是《5》kg进程已结束,退出代码0

学习笔记(34):Python网络编程并发编程-异步调用与回调机制相关推荐

  1. 并发编程 - 线程 - 1.线程queue/2.线程池进程池/3.异步调用与回调机制

    1.线程queue :会有锁 q=queue.Queue(3) q.get() q.put() 先进先出 队列后进先出 堆栈优先级队列 1 """先进先出 队列" ...

  2. 学习笔记(19):Python网络编程并发编程-互斥锁

    立即学习:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu 1.互斥锁: 多进程间的内存是相互隔离的,因此其数据也是 ...

  3. 学习笔记(33):Python网络编程并发编程-进程池线程池

    立即学习:https://edu.csdn.net/course/play/24458/296451?utm_source=blogtoedu 进程池与线程池: 一般应用在网站上,进程池或线程池最大的 ...

  4. 学习笔记(28):Python网络编程并发编程-死锁与递归锁

    立即学习:https://edu.csdn.net/course/play/24458/296445?utm_source=blogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只 ...

  5. 学习笔记(18):Python网络编程并发编程-守护进程

    立即学习:https://edu.csdn.net/course/play/24458/296429?utm_source=blogtoedu 守护进程(了解) 1.概念:守护进程是主进程在创建子进程 ...

  6. 学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现

    立即学习:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu 1.服务器端:接收客户端发送的命令,subprocess ...

  7. 学习笔记(08):Python网络编程并发编程-实现服务端可以对多个客户端提供服务

    立即学习:https://edu.csdn.net/course/play/24458/296237?utm_source=blogtoedu 链接循环,一个服务器服务多个客户端, 思路1:服务器一个 ...

  8. python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业. 4.提供图片或网站显示的学习 ...

  9. 学习笔记(06):Python网络编程并发编程-在简单套接字基础上加上通信循环

    立即学习:https://edu.csdn.net/course/play/24458/296235?utm_source=blogtoedu 1.服务器端 #以打电话通讯为例子进行说明 #导入相应的 ...

最新文章

  1. 本地连接受限制或无连接的解决办法
  2. 本地服务器模板网站怎么安装,本地服务器怎样安装帝国CMS模版网站
  3. 使用VS2003创建WEB程序的时候出现AutoMation服务器不能创建对象错误
  4. 分布式事务seate-server的docker镜像的制作与部署
  5. 前端学习(2350):condition启动模式配置
  6. android中Intent的一些用法和总结
  7. android 移除泛型中元素_Android 代码混淆 混淆方案
  8. python简单实现文件上传/下载
  9. html网页中wmode,关于html:Quicktime-Wmode透明问题
  10. python opencv4.0 提取alpha 通道
  11. Wlan学习—无线网络安全
  12. 论微信朋友圈,巨头的解决之道
  13. 小程序上线发布后,实现版本自动更新,用户无感知
  14. 微信小程序云开发 把时间戳转换成正常的时间格式上传到数据库中
  15. 中国电影|嘉宝盘点近几年国内票房突破30亿的影片
  16. java调用word模板文件_Java使用模板导出word文档
  17. 应用交付工程师应该具备的关键能力(售前篇)
  18. 月份和星期的英语(请不要再弄错了)
  19. android 内嵌 数据库,安卓开发之嵌入式数据库sqlite的操作方法
  20. 看inux系统中的c语言编译器,Linux系统自定义安装C语言gcc编译器图文详细教程

热门文章

  1. [VMware WorkStation]虚拟机网络
  2. 【javascript】操作符:一元操作符
  3. 【C】——C项目中的菜单功能(源码)
  4. MAC 下配置JavaEE开发环境
  5. Asp.Net Core 工作单元 UnitOfWork UOW
  6. 20172311 2017-2018-2 《程序设计与数据结构》第八周学习总结
  7. Python_48re模块的sub方法
  8. Codechef Yet another cute girl
  9. [BZOJ] 1620: [Usaco2008 Nov]Time Management 时间管理
  10. 4源代码的下载和编译