共计 767 个字符,预计需要花费 2 分钟才能阅读完成。
一、模拟普通同步
-
我们用两个函数来模拟两个客户端请求,并依次进行处理
def req_a(): """模拟请求 a""" print('开始处理请求 req_a') print('完成处理请求 req_a') def req_b(): """模拟请求 b""" print('开始处理请求 req_b') print('完成处理请求 req_b') def main(): """模拟 tornado 框架,处理两个请求""" req_a() req_b() if __name__ == "__main__": main()
执行结果
开始处理请求 req_a 完成处理请求 req_a 开始处理请求 req_b 完成处理请求 req_b
说明:同步是按部就班的依次执行,始终按照同一个步调执行,上一个步骤未执行完不会执行下一步
二、模拟耗时同步
-
在处理请求 req_a 时需要执行一个耗时的工作(如 IO)其执行过程如下
import time def long_io(): """模拟耗时 IO 操作""" print("开始执行 IO 操作") time.sleep(5) print("完成 IO 操作") return "io result" def req_a(): print("开始处理请求 req_a") ret = long_io() print("ret: %s" % ret) print("完成处理请求 req_a") def req_b(): print("开始处理请求 req_b") print("完成处理请求 req_b") def main(): req_a() req_b() if __name__=="__main__": main()
执行过程:
开始处理请求 req_a 开始执行 IO 操作 完成 IO 操作 ret: io result 完成处理请求 req_a 开始处理请求 req_b 完成处理请求 req_b
说明:耗时的操作会将代码执行阻塞住,即 req_a 未处理完 req_b 是无法执行的
正文完
星哥说事-微信公众号