当前位置 博文首页 > 文章内容

    Django 多进程多线程的一些个人理解

    作者: 栏目:未分类 时间:2020-10-11 18:01:52

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    一、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);
    }