博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步调用与回调机制
阅读量:6293 次
发布时间:2019-06-22

本文共 1495 字,大约阅读时间需要 4 分钟。

 

提交任务的两种方式。

同步调用:提交完任务后,就在原地等待任务执行完毕,拿到结果,再执行下一行代码,导致程序是串行执行

异步调用:提交完任务后,不等待任务执行完毕

 

from concurrent.futures import ThreadPoolExecutorimport time,randomdef la(name):    print('%s is laing'%name)    time.sleep(random.randint(3,5))    res = random.randint(7,13)*'#'    return {
'name':name,'res':res}def weigh(shit): shit = shit.result() # 异步回掉时,处理接收到的对象 name = shit['name'] size = len(shit['res']) print('%s 拉了 《%s》kg'%(name,size))if __name__ =='__main__': pool = ThreadPoolExecutor(13) # 同步调用 # shit1 = pool.submit(la,'alex').result() # weigh(shit1) # shit2 = pool.submit(la, 'huhao').result() # weigh(shit2) # shit3 = pool.submit(la, 'zhanbin').result() # weigh(shit3) # 异步调用 pool.submit(la, 'alex').add_done_callback(weigh) pool.submit(la, 'huhao').add_done_callback(weigh) pool.submit(la, 'zhanbin').add_done_callback(weigh)

 

简单网页爬虫示例:

import requests,timefrom concurrent.futures import ThreadPoolExecutordef get(url):    print('get url',url)    response = requests.get(url)    time.sleep(3)    return {
'url':url,'content':response.text}def parse(res): res = res.result() print('%s parse res is %s'%(res['url'],len(res['content'])))if __name__ == '__main__': urls = [ 'http://www.cnblogs.com/stin', 'https://www.python.org', 'https://www.openstack.org', ] pool = ThreadPoolExecutor(2) for url in urls: pool.submit(get,url).add_done_callback(parse)

 

转载于:https://www.cnblogs.com/stin/p/8548454.html

你可能感兴趣的文章
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>
js 判断整数
查看>>
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>
!important 和 * ----hack
查看>>
聊天界面图文混排
查看>>
控件的拖动
查看>>
svn eclipse unable to load default svn client的解决办法
查看>>
Android.mk 文件语法详解
查看>>
QT liunx 工具下载
查看>>
内核源码树
查看>>
Java 5 特性 Instrumentation 实践
查看>>
AppScan使用
查看>>