前言
首先描述下业务场景,有一个接口,其中存在耗时操作,耗时操作的执行结果将写入数据表中,不需要通过该接口直接返回。
因此理论上该接口可以在耗时操作执行结束前返回。本文中使用多线程后台运行耗时操作,主线程提前返回,实现接口的提前返回。
此外,还尝试使用协程实现,经验证,协程适用于多任务并发处理,遇到耗时操作时自动切换任务,可以缩短多任务总的执行用时,而无法缩短单任务的执行用时,无法实现提前返回,因此不适用该场景。
1 同步任务
如下所示,定义任务,模拟耗时操作。
Python学习交流Q群:906715085###
import time
def task():
print("task start")
print("sleep...")
time.sleep(10)
print("task end")
如下所示,main 函数中执行任务,return true 用于模拟接口的返回。
如果最后执行 print(“task_result={}”.format®) 表明是同步执行,否则是异步执行。
def main():
print("main start")
task()
print("main end")
return True
if __name__ == '__main__':
r = main()
print("task_result={}".format(r))
执行结果如下所示,表明是同步执行。
main start
task start
sleep...
task end
main end
task_result=True
对于接口来说,响应时间是非常重要的性能指标,因此可以通过异步执行实现接口的提前返回,进而降低接口响应时间。
2 异步任务
本文中提到的异步执行指的是后台运行某些代码或功能,不阻塞主程序。
异步执行的常规实现方式是使用多线程/多进程。