Django 多進程多線程的一些個人理解


一、Django 開發環境與生產環境

開發/調試
python manage.py runserver 0.0.0.0:8080
生產環境

Nginx + uWSGI + supervisor

生產環境不用 python manage.py runserver 0.0.0.0:8080 的原因:性能。

二、Django 多進程多線程

  • python manage.py runserver 默認多線程(Django 1.x 版本以后) --nothreading 單線程

  • Flask/tornado 默認單線程

  • 不給 uWSGI 加進程,uWSGI 默認單進程單線程

  • 給 uWSGI 加進程、線程:--processes 4 –-threads 2(每個進程開的線程數)

三、並行並發

  • 並行:兩個或者多個事件在 同一時間點 發生。

  • 並發:兩個或多個事件在 同一時間間隔 發生。

Python、Java多線程區別:對於 Python,不管有多少處理器,任何時候只有一個線程在執行,但是 Java 可以同時開啟多個線程進行處理。

Python GIL鎖,導致 Python 不能充分利用多核。

IO阻塞型/CPU計算型任務區別:CPU密集型 也叫計算密集型,指的是進行大量的計算、邏輯判斷等CPU動作,消耗CPU資源。IO阻塞型 指的是進行大量的I/O讀/寫操作。

多線程/多進程:多線程 就是指一個進程中同時有多個線程正在執行。多進程 就是指計算機同時執行多個進程,一般是同時運行多個軟件。

Python:多核不存在多線程並行,但是可以多進程並行。

四、進程線程

問:單核 CPU,單進程,單線程,線程始終在這一個 CPU 上運行?

答:是。

問:多核 CPU,單進程,單線程,線程始終在同一個 CPU 上運行?

答:默認不是,但是代碼中可以綁定。

問:多核 CPU,單進程,多線程,多個線程並行在多個 CPU 上還是某一時刻只有一個線程運行在一個 CPU 上、其他線程等待?

答:因為 GIL 存在,一個進程中只允許一個線程在運行,但是這個線程會在不同 CPU 之間切換。

Python 多線程:計算圓周率 pi

def function(p):
    for i in range(1, 10000000000000000):
        z = i % 2
        f = 1 / (2 * i - 1)
        if z == 0:
            f = (-1) * f
        p += f
       
if __name__ == "__main__":
    p = 0
    function(p)
    p *= 4

C語言多線程:計算圓周率 pi

#include <stdio.h>
int main(){

        //計算π的值
        int i;
        int z;
        double f;
        double p=0;
        for(i=1;i<=10000000000000000;i++){
                //取模
                z=i%2;
                //每項
                f=(double)1/(2*i-1);
                //z等於0的時候是負數
                if(z==0){
                        f=-1*f;
                }
                //加一起
                p+=f;
        }
        //最終π的值
        p=p*4;
        printf("%.100lf",p);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM