欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談django url請求與數(shù)據(jù)庫連接池的共享問題

 更新時間:2019年08月29日 09:16:59   作者:rongyongfeikai2  
今天小編就為大家分享一篇淺談django url請求與數(shù)據(jù)庫連接池的共享問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

但凡介紹數(shù)據(jù)庫連接池的文章,都會說“數(shù)據(jù)庫連接是一種關(guān)鍵的有限的昂貴的資源,這一點在多用戶的網(wǎng)頁應用程序中體現(xiàn)得尤為突出。對數(shù)據(jù)庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數(shù)據(jù)庫連接池正是針對這個問題提出來的。數(shù)據(jù)庫連接池負責分配、管理和釋放數(shù)據(jù)庫連接,它允許應用程序重復使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個;釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接來避免因為沒有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。這項技術(shù)能明顯提高對數(shù)據(jù)庫操作的性能。”

這句話雖然說得很好,但也很讓人疑惑。比如,多個請求是怎樣共用數(shù)據(jù)庫連接池啊?

其實,數(shù)據(jù)庫連接池主要是利用了程序,靜態(tài)變量與靜態(tài)方法的概念實現(xiàn)的。靜態(tài)變量和靜態(tài)方法,是程序運行時,就被加載到內(nèi)存中的。該進程中所有對于它的訪問,都是對“唯一”的它的訪問。所以,才能有數(shù)據(jù)庫連接池被共享的概念。

可以看到,靜態(tài)變量a以及靜態(tài)方法add,即使類A從未被實例化過,它們也都會被加載到內(nèi)存中。

另外,在python的此次運行(一個進程)中,多次對a的操作,都是對為一個的這個a變量的操作,所以它的值是在被操作后累加的。

這個在我上面簡單的例子中很好理解。那么如何理解Web應用程序(如django程序)在接到url請求時的場景呢?在多個請求時,他們是如何可以共享數(shù)據(jù)庫連接池的?

我寫了一個簡單的例子:

Test model,使用了單例模式,它的功能是調(diào)用sqlalchemy.pool中的數(shù)據(jù)庫連接池。

而views.py的index方法,則是調(diào)用Test的getinstance方法獲得它的實例,同時用它的數(shù)據(jù)庫連接池。

為了看得清楚,我在這個方法中增加打印了當前所屬進程的pid,test和test.connpool信息。

首先要說明一點,apache在windows和linux中的運行方式不盡相同(windows是兩個httpd進程,一個父進程,一個子進程,子進程里面多個線程處理請求)。在linux中,默認用prefork的方式運行。即一個父進程,多個子進程,這多個子進程負責處理web請求。

如下圖所示:

然后我們嘗試多次url請求(適當變化url,避免緩存);并記錄結(jié)果:

http://10.67.2.21:8081/ips/
count:3,processid:20016<br/>test:<ipsapp.models.Test object at 0x7f2b1070ac50>,connpool:<sqlalchemy.pool.QueuePool object at 0x7f2b1070ad10>

http://10.67.2.21:8081/ips/?user=kjsdkfjsdf&kljsdlkfjsdf
count:3,processid:20013<br/>test:<ipsapp.models.Test object at 0x7f2b107c6c10>,connpool:<sqlalchemy.pool.QueuePool object at 0x7f2b107c6cd0>

http://10.67.2.21:8081/ips/?user=kjsdkfjsdf&kljsdlkfjsdf&pass=ksjdkjdf
count:3,processid:20018<br/>test:<ipsapp.models.Test object at 0x7f2b103c6c50>,connpool:<sqlalchemy.pool.QueuePool object at 0x7f2b103c6d10>

http://10.67.2.21:8081/ips/?user=123u42i3u4
count:3,processid:20016<br/>test:<ipsapp.models.Test object at 0x7f2b1070ac50>,connpool:<sqlalchemy.pool.QueuePool object at 0x7f2b1070ad10>

http://10.67.2.21:8081/ips/?user=123u42i3u4&tewstsjdfkjslfj
count:3,processid:20013<br/>test:<ipsapp.models.Test object at 0x7f2b107c6c10>,connpool:<sqlalchemy.pool.QueuePool object at 0x7f2b107c6cd0>

http://10.67.2.21:8081/ips/?user=passwode
count:3,processid:20018<br/>test:<ipsapp.models.Test object at 0x7f2b103c6c50>,connpool:<sqlalchemy.pool.QueuePool object at 0x7f2b103c6d10>

http://10.67.2.21:8081/ips/?newiusd=kjsdkjfd&kjsdkjf=ksdjflksjdlkf
count:3,processid:20016<br/>test:<ipsapp.models.Test object at 0x7f2b1070ac50>,connpool:<sqlalchemy.pool.QueuePool object at 0x7f2b1070ad10>

apache pid Test object QueuePool object
20016 0x7f2b1070ac50 0x7f2b1070ad10
20013 0x7f2b107c6c10 0x7f2b107c6cd0
20018 0x7f2b103c6c50 0x7f2b103c6d10
20016 0x7f2b1070ac50 0x7f2b1070ad10
20013 0x7f2b107c6c10 0x7f2b107c6cd0
20018 0x7f2b103c6c50 0x7f2b103c6d10
20016 0x7f2b1070ac50 0x7f2b1070ad10

我把分屬于不同apache進程處理的請求用顏色標出了,在本例子中,7個請求,分配到了3個apache進程處理??梢钥吹?,被同一個apache子進程處理的請求,是共用同一個test和test.connpool實例的,即他們共享數(shù)據(jù)庫連接池。

所以,數(shù)據(jù)庫連接池,對于web請求而言,是屬于同一個apache子進程處理的請求共用一個數(shù)據(jù)庫連接池。

以上這篇淺談django url請求與數(shù)據(jù)庫連接池的共享問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python圖像處理之二值化處理

    Python圖像處理之二值化處理

    所謂”二值化處理“就是將矩陣中每個點的RGB值(0,0,0)[黑色]或者(255,255,255)[白色],這篇文章主要介紹了Python圖像處理之二值化處理,需要的朋友可以參考下
    2024-05-05
  • 對python中的six.moves模塊的下載函數(shù)urlretrieve詳解

    對python中的six.moves模塊的下載函數(shù)urlretrieve詳解

    今天小編就為大家分享一篇對python中的six.moves模塊的下載函數(shù)urlretrieve詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python Matplotlib 庫使用指南

    Python Matplotlib 庫使用指南

    這篇文章主要介紹了Python Matplotlib 庫使用基本指南,通過本教程,我們學習了使用 Matplotlib 創(chuàng)建各種類型的圖表和圖形,Matplotlib 提供了豐富的函數(shù)和選項,以滿足不同的數(shù)據(jù)可視化需求,需要的朋友可以參考下
    2024-01-01
  • 解決pycharm每次新建項目都要重新安裝一些第三方庫的問題

    解決pycharm每次新建項目都要重新安裝一些第三方庫的問題

    今天小編就為大家分享一篇解決pycharm每次新建項目都要重新安裝一些第三方庫的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • PyQt5筆記之彈出窗口大全

    PyQt5筆記之彈出窗口大全

    今天小編就為大家分享一篇PyQt5筆記之彈出窗口大全,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python2中文處理紀要的實現(xiàn)方法

    Python2中文處理紀要的實現(xiàn)方法

    本篇文章主要介紹了Python2中文處理紀要的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • python適合人工智能的理由和優(yōu)勢

    python適合人工智能的理由和優(yōu)勢

    在本篇文章里小編給大家分享了關(guān)于python適合人工智能的理由和優(yōu)勢以及相關(guān)知識點,需要的朋友們學習下。
    2019-06-06
  • python 使用cycle構(gòu)造無限循環(huán)迭代器

    python 使用cycle構(gòu)造無限循環(huán)迭代器

    這篇文章主要介紹了python 使用cycle構(gòu)造無限循環(huán)迭代器的方法,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-12-12
  • Python實現(xiàn)獲取操作系統(tǒng)版本信息方法

    Python實現(xiàn)獲取操作系統(tǒng)版本信息方法

    這篇文章主要介紹了Python實現(xiàn)獲取操作系統(tǒng)版本信息方法,本文在命令行中獲取操作系統(tǒng)信息,介紹了platform模塊的使用,需要的朋友可以參考下
    2015-04-04
  • pandas讀取CSV文件時查看修改各列的數(shù)據(jù)類型格式

    pandas讀取CSV文件時查看修改各列的數(shù)據(jù)類型格式

    這篇文章主要介紹了pandas讀取CSV文件時查看修改各列的數(shù)據(jù)類型格式,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07

最新評論