zoukankan      html  css  js  c++  java
  • python的学习之旅---回调机制

    回调机制

    import requests

    需要 requests 模块的支持

    需要回调函数的场景:进程池中任何一个任务一旦处理完了,就立即告知主进程:我好了额,你可以处理我的结果了。主进程则调用一个函数去处理该结果,该函数即回调函数

    我们可以把耗时间(阻塞)的任务放到进程池中,然后指定回调函数(主进程负责执行),这样主进程在执行回调函数时就省去了I/O的过程,直接拿到的是任务的结果。

     1 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
     2 import requests
     3 import os
     4 import time
     5 
     6 def get(url):
     7     print('%s GET %s' %(os.getpid(),url))
     8     response=requests.get(url)
     9     if response.status_code == 200:
    10         return {'url':url,'text':response.text}
    11 
    12 def parse(res):
    13     res=res.result()
    14     url=res['url']
    15     text=res['text']
    16     print('%s parse %s res:%s' %(os.getpid(),url,len(text)))
    17 
    18 if __name__ == '__main__':
    19     urls = [
    20         'https://www.baidu.com',
    21         'https://www.python.org',
    22         'https://www.openstack.org',
    23         'https://help.github.com/',
    24         'http://www.sina.com.cn/'
    25     ]
    26 
    27     # p=ProcessPoolExecutor()
    28     # start=time.time()
    29     # l=[]
    30     # for url in urls:
    31     #     furture=p.submit(get,url)
    32     #     l.append(furture)
    33     # p.shutdown(wait=True)
    34     #
    35     # for furture in l:
    36     #     parse(furture)
    37     #
    38     # print(time.time()-start) #4.504257440567017
    39 
    40     p=ProcessPoolExecutor()
    41     start=time.time()
    42     for url in urls:
    43         future=p.submit(get, url)
    44         future.add_done_callback(parse) #parse(futrue)
    45     p.shutdown(wait=True)
    46     print(time.time()-start) #3.1761815547943115
    47     print(os.getpid())

    future=p.submit(get, url)                             

    future.add_done_callback(parse)                #parse(futrue)     把future对象传给回调函数 parse 通过对象的 .result 获取future的 return的值

    也就是说如果使用回调函数, 子进程的函数必须要写返回值。想要拿到返回值 必须要用    .result      

  • 相关阅读:
    高质量图形库:pixellib
    有了 Docker,用 JavaScript 框架开发的 Web 站点也能很好地支持网络爬虫的内容抓取
    Freebie: Material Design UI Kit
    Git 10 周年之际,创始人 Linus Torvalds 访谈
    React.js 样式组件:React Style
    有趣 GIF 动图集
    10个免费开源的JS音乐播放器插件
    简约的单页应用引擎:sonnyJS
    2015年4月 非常干货之Python资源大全
    评论 ”[实例] 设计基于JQM的WebApp“
  • 原文地址:https://www.cnblogs.com/surehunter/p/7896298.html
Copyright © 2011-2022 走看看