新聞中心
flask是一個(gè)web框架

10年的岫巖網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷(xiāo)型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整岫巖建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“岫巖網(wǎng)站設(shè)計(jì)”,“岫巖網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
從客戶(hù)端發(fā)向服務(wù)器的請(qǐng)求和服務(wù)器處理請(qǐng)求是的線程之間是什么關(guān)系?
比如發(fā)起10個(gè)請(qǐng)求,那么flask開(kāi)啟多少個(gè)線程來(lái)處理請(qǐng)求?
flask是不會(huì)開(kāi)啟線程的,那么線程是誰(shuí)來(lái)開(kāi)啟的呢?
其實(shí)是由webserver,外部服務(wù)器開(kāi)啟的,我們的flask框架或者寫(xiě)的項(xiàng)目代碼,如果沒(méi)有外部服務(wù)器是無(wú)法運(yùn)行的,如果要讓項(xiàng)目跑起來(lái)的話(huà),必須要有一個(gè)webserver, 所以說(shuō),我們看到的flask中的app.run()就是啟動(dòng)flask中自帶的內(nèi)置的webserver,如果我們要把代碼部署到生產(chǎn)環(huán)境中去,真實(shí)的給用戶(hù)使用的話(huà),一般的是不會(huì)使用flask自帶的webserver的,而是選擇另外的webserver部署flask的代碼。
默認(rèn)的情況下,flask自帶的web服務(wù)器是以單進(jìn)程單線程來(lái)響應(yīng)我們的客戶(hù)端請(qǐng)求。大家很容易想到,10個(gè)請(qǐng)求進(jìn)來(lái)是沒(méi)有辦法同事執(zhí)行的,已給請(qǐng)求執(zhí)行完之后才能執(zhí)行另一個(gè)請(qǐng)求。當(dāng)然,flask自帶的web服務(wù)器也可以開(kāi)啟多線程或者多進(jìn)程模式。可以在pycharm中看到。
from app import create_app
app = create_app()if __name__ == '__main__': # print('id為' + str(id(app)) + '啟動(dòng)')
app.run(host='0.0.0.0', debug=True) # 單進(jìn)程單線程
app.run(host='0.0.0.0', debug=True, threadad=True) # 單進(jìn)程多線程,進(jìn)程默認(rèn)為1
app.run(host='0.0.0.0', debug=True, threadad=True, processes=2) # 多進(jìn)程多線程,進(jìn)程processes默認(rèn)為1對(duì)于一個(gè)網(wǎng)站而言,必須要有一定的承受并發(fā)的能力,request只是一個(gè)變量名,真正的實(shí)例對(duì)象是Request()。同一時(shí)刻會(huì)有多個(gè)請(qǐng)求,而每一個(gè)請(qǐng)求的請(qǐng)求信息極有可能是不同的。這就會(huì)造成我們實(shí)際發(fā)送過(guò)來(lái)的請(qǐng)求信息是不相同的。那么用一個(gè)變量request怎么代表不同用戶(hù)的請(qǐng)求信息呢?
由于單線程是順序執(zhí)行的,只有處理完一個(gè)請(qǐng)求才能處理另一個(gè)請(qǐng)求,對(duì)于單線程來(lái)說(shuō),請(qǐng)求就像排隊(duì)一樣,請(qǐng)求進(jìn)來(lái)之后,flask會(huì)實(shí)例化一個(gè)Request對(duì)象,然后用request來(lái)裝載我們的請(qǐng)求信息,這個(gè)時(shí)候我們只有一個(gè)實(shí)例化的Request,所以啊,用request變量名是可以拿到我們要的請(qǐng)求信息的,所以request變量名總是會(huì)指向當(dāng)前的請(qǐng)求,request就不會(huì)出現(xiàn)混亂。
多線程的請(qǐng)求,(對(duì)象是保存狀態(tài)的地方)
怎么解決呢?
request1 = Request() request2 = Request() request3 = Request()
但是我們并不知道到底有多少個(gè)請(qǐng)求會(huì)發(fā)生,那么有沒(méi)有一種用一個(gè)變量來(lái)表示的所有的請(qǐng)求信息呢,有,是字典.線程里有什么可以唯一確定一個(gè)線程呢,那就是線程的id號(hào),可以作為key,在flask中就是采用的這種原理來(lái)解決的,這種用不同id號(hào)作為鍵,其實(shí)就是線程隔離,線程隔離只是一種思想,并不一定都是用字典實(shí)現(xiàn),還可以用其他的方式實(shí)現(xiàn)。
分享題目:創(chuàng)新互聯(lián)Python教程:flask多線程模式
標(biāo)題來(lái)源:http://fisionsoft.com.cn/article/cocided.html


咨詢(xún)
建站咨詢(xún)
