背景
遇到一个问题,之前写了创建评估任务–调用扫描–结果提交漏洞这么一个功能,运行的时候发现创建完评估任务提交一个请求直接执行扫描,不扫完就没有return结果,所以造成了没扫描完不能成功创建评估任务的尴尬局面。
脚本的正常逻辑应该是提交请求–判断合法性–返回结果–执行扫描–提交漏洞
解决办法
先说最后解决的方法
1、最终解决办法–异步调用
参考:python调用异步函数执行
写个装饰器定义多线程函数,在扫描脚本前加装饰器。
scan函数能跟接收请求的svnaddr函数异步执行,这样也能达到先return再scan的效果
def myasync(f):
def wrapper(*args, **kwargs):
thr = Thread(target=f, args=args, kwargs=kwargs)
thr.start()
return wrapper
@app.route('/svnaddr', methods=['POST'])
def svnaddr():
if flag == False:
# 判断参数合法性
code = 1
message = str(taskid)+' create success !'
handleScan(taskid, repo, model, scantime, status)
ret