前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Python 回调函数实现异步处理

Python 回调函数实现异步处理

作者头像
Wu_Candy
发布2022-07-04 20:09:57
发布2022-07-04 20:09:57
1.9K00
代码可运行
举报
文章被收录于专栏:无量测试之道无量测试之道
运行总次数:0
代码可运行
作者 | 无量测试之道 编辑 | 小 晴
这是无量测试之道的第158篇原创

说到异步处理大家应该会联想到Ajax 处理,那我们先来说说什么是Ajax 请求。

Ajax 就相当于是模拟了一个信息发送请求,你可以在很多网站上注册的时候会发现,比如用户名输入“123”,那么它可能会提示你该用户已经存在,而给你的感觉是页面并没刷新,也就是并没有提交表单,而用户名又是存放在数据库内的,也就是说要查询用户名是否存在,就必须得发送表单的里的用户名,然后再在数据库中去查询。

而这个过程就是用了Ajax 来处理的,用户输入用户名,当表单的焦点发生变化的时候,则会触发Ajax,然后Ajax 发送一个GET或者POST请求给服务器,服务器就会处理传递过来的数据!

今天给大家分享的是在Python 里面通过回调函数来实现异步的处理。

示例代码如下所示:
代码语言:javascript
代码运行次数:0
复制
import threading
import time
import datetime

#第一个请求
def request_1():
    print("the request 1 is start")
    io(callback)
    print("the request 1 is end")

#第二个请求
def request_2():
    print("the request 2 is start")
    time.sleep(2)
    print("the request 2 is end")

#获取数据请求类的操作,如:从db读取数据,循环耗时,调用其他api等
def io(callback):
    def run(call):
        print("the run is start")
        time.sleep(5)
        print("the run is end")
        conn_db=[x for x in range(10000)] #模拟从db获取数据
        call(conn_db)
    # 这里是启动一个线程去处理这个io操作,不用阻塞程序的处理
    threading.Thread(target=run,args=(callback,)).start()

#回调函数
def callback(data):
    print("the callback is start")
    print("the response of callback is:",data)
    print("the callback is end")

if __name__ == '__main__':
    start_time=datetime.datetime.now()
    request_1()
    request_2()
    end_time=datetime.datetime.now()
    #这里是在统计总耗时,从打印的结果可以看到是异步处理的。
    print("the spend of total time is:",(end_time-start_time).seconds)
输出内容如下:
代码语言:javascript
代码运行次数:0
复制
the request 1 is start
the run is start
the request 1 is end
the request 2 is start
the request 2 is end
the spend of total time is: 2
the run is end
the callback is start
the response of callback is:[0, 1,...]
the callback is end

Process finished with exit code 0

总结:

异常的处理就是在我们需要等待一个io 耗时处理时,可以不用排队等待而去做其他的可以处理的事情,这样就提高了系统的处理效率,这对于一个系统来说是非常重要的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者 | 无量测试之道 编辑 | 小 晴
  • 这是无量测试之道的第158篇原创
  • 示例代码如下所示:
  • 输出内容如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档