遇到一个场景,就是爬虫代码在优先返回状态码的情况之后,再调用接下来的代码,感觉说起来很玄,也很无解的样子,可是后来在网上突然查到了try,一下就豁然开朗了
def func():
try:
print(1234)
return 'ok' # 函数得到了一个返回值
finally: # finally语句块中的语句依然会执行
print(45678)
key=func()
print(key)
try和except搭配,大家都知道,只能择其一
但是try和finally搭配,就能择其二了
很简单,但是不用的话,很容易就忘记了,所以,这样提示,爬虫无止境
但是,如果finally里面,是一个很耗时的工作,如果走接口的方式,这种其实就很不合适了
from fastapi import FastAPI
import uvicorn
from pydantic import BaseModel
import time,os
import threading
app=FastAPI()
def run():
print("我进入爬取数据了")
time.sleep(10)
print("我爬取到数据了")
@app.post("/test")
async def test():
result_send = {'code': '200', 'msg': ['0000DaZ9QdNtcs3tkMn-7SMZaJk:1di522o4s', ['110186', '夏添', '11001', '共青农商银行']]}
print("我进来了")
if result_send["code"] == "200":
print("我进入200了")
result_send_msg = result_send["msg"]
try:
print("我要先返回了")
key=time.time()
return key
except:
print("我是出问题了")
return result_send
finally:
print("我进入爬数据了99999999999999")
thread = threading.Thread(target=run)
thread.start()
if __name__ == '__main__':
uvicorn.run(app=app,host="0.0.0.0",port=9000)
也就是,我们在finally里面再多开个线程,那么,其实就能满足我们的需求了