zoukankan      html  css  js  c++  java
  • 异步调用与回调机制

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018/6/19 14:05
    # @File    : 异步调用与回调机智.py

    """

    同步调用和阻塞不一样:

    同步调用不管是io型程序还是计算型程序,执行一个程序之后就是等待,

    阻塞是io型特有的,因为io耗时而形成了阻塞现象

    """

    # 1、同步调用:

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

    # from concurrent.futures import ThreadPoolExecutor
    # import time
    # import random
    #
    #
    # def 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):
    #     name = shit['name']
    #     size = len(shit['res'])
    #     print('%s la l <%s> kg' % (name, size))
    #
    #
    # if __name__ == '__main__':
    #     pool = ThreadPoolExecutor(13)  # 限制池中数量
    #     shit1 = pool.submit(la, 'alex').result()
    #     weigh(shit1)
    #
    #     shit2 = pool.submit(la, 'wupeiqi').result()
    #     weigh(shit2)
    #
    #     shit3 = pool.submit(la, 'yuanhao').result()
    #     weigh(shit3)
    View Code

    # 2、异步调用:

    提交完任务后,不等待任务执行完毕,

    from concurrent.futures import ThreadPoolExecutor
    import time
    import random
    
    
    def 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 la l <%s> kg' % (name, size))
    
    
    if __name__ == '__main__':
        pool = ThreadPoolExecutor(13)  # 限制池中数量
        pool.submit(la, 'alex').add_done_callback(weigh)  # 前面任务执行完毕,自动触发weigh函数,把前面对象(pool.submit(la, 'alex'))传入
        pool.submit(la, 'wupeiqi').add_done_callback(weigh)
        pool.submit(la, 'yuanhao').add_done_callback(weigh)
    View Code




  • 相关阅读:
    Google Code 项目代码托管网站上 Git 版本控制系统使用简明教程
    C/C++预定义宏
    使用 Raspberry Pi 远程桌面
    Vim 中将 tab 自动转换成空格
    DR模式搭建LVS负载均衡
    NAT模式LVS搭建负载均衡集群
    php扩展memached安装
    raw_input与input的区别
    keepalived+lvs搭建高可用负载均衡集群
    使用keepalived搭建nginx高可用
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9198413.html
Copyright © 2011-2022 走看看