精华内容
下载资源
问答
  • 简单瞧瞧uwsgi源码

    2019-10-08 23:31:16
    文章目录uwsgi.c做了什么 uwsgi.c做了什么 core/uwsgi.c: ... // !!!初始化socket协议!!! // initialize socket protocols (do it after caching !!!) uwsgi_protocols_register(); ... // !!! 绑定...

    uwsgi.c做了什么

    core/uwsgi.c:
    ...
    
        // !!!初始化socket协议!!!
        // initialize socket protocols (do it after caching !!!)
        uwsgi_protocols_register();
        ...
    
        // !!! 绑定所有未绑定的socket !!!
        uwsgi_bind_sockets();
        
        // put listening socket in non-blocking state and set the protocol
        uwsgi_set_sockets_protocols();
        ...
        
        // initialize request plugin only if workers or master are available
        if (uwsgi.sockets || uwsgi.master_process || uwsgi.no_server || uwsgi.command_mode || uwsgi.loop) {
            for (i = 0; i < 256; i++) {
                if (uwsgi.p[i]->init) {
                    uwsgi.p[i]->init();
                }    
            }    
        }
        ...
    
        if (uwsgi.has_threads) {
            ...
            // again check for workers/sockets...
            if (uwsgi.sockets || uwsgi.master_process || uwsgi.no_server || uwsgi.command_mode || uwsgi.loop) {
                for (i = 0; i < 256; i++) {
                    if (uwsgi.p[i]->enable_threads)
                        uwsgi.p[i]->enable_threads();
                }
            }
        }
        ...
    
        //init apps hook (if not lazy)
        if (!uwsgi.lazy && !uwsgi.lazy_apps) {
            uwsgi_init_all_apps();
        }
        ...
    
    
        if (!uwsgi.status.is_cheap) {
            if (uwsgi.cheaper && uwsgi.cheaper_count) {
                int nproc = uwsgi.cheaper_initial;
                if (!nproc)
                    nproc = uwsgi.cheaper_count;
                for (i = 1; i <= uwsgi.numproc; i++) {
                    if (i <= nproc) {
                        if (uwsgi_respawn_worker(i))
                            break;
                        uwsgi.respawn_delta = uwsgi_now();
                    }    
                    else {
                        uwsgi.workers[i].cheaped = 1; 
                    }    
                }    
            } 
        ...
    }
    

    uwsgi_start中uwsgi_protocols_register做了什么

    主要是初始化socket协议在这里插入图片描述

    展开全文
  • uwsgiconf:从Python代码配置uWSGI
  • uwsgi:uWSGI应用程序服务器容器
  • wagtail-uwsgi-frontendcache 基于uWSGI缓存模块的前端缓存
  • 一、安装虚拟环境安装pip install uwsgi源码安装wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz tar zxvf uwsgi-latest.tar.gz cd uwsgi-latest make测试创建一个wsgi应用:#example.py def appl...

    uWsgi做为一款应用服务器,其安装配置是非常简单的。

    一、安装

    • 虚拟环境安装
    pip install uwsgi
    • 源码安装
    wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
    tar zxvf uwsgi-latest.tar.gz
    cd uwsgi-latest
    make
    • 测试

    创建一个wsgi应用:

    #example.py
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"]       

    如您所见,它由单个Python函数组成。之所以称为“应用程序”,是因为它可以uWSGI加载器加载。

    接下来我们启动 uWSGI 来运行一个 HTTP 服务器,将程序部署在HTTP端口 9000 上:

    # 在虚拟环境中启动uwsgi
    uwsgi --http 127.0.0.1:9000 --wsgi-file example.py

    打开浏览器,输入:http://127.0.0.1:9000

    07b3704e5ae6b5ebcedf6e81732f2783.png
    图1 hello world

    默认情况下,uWSGI 启动一个单一的进程和一个单一的线程。

    你可以用 --processes 选项添加更多的进程,或者使用 --threads 选项添加更多的线程 ,也可以两者同时使用。

    uwsgi --http 127.0.0.1:9090 --wsgi-file foobar.py --master --processes 4 --threads 2

    以上命令将会生成 4 个进程, 每个进程有 2 个线程。

    二、配置

    uWSGI支持多种与Web服务器集成的方法。它也能够自己处理HTTP请求。但在实际的生产环境中,一般会配合nginx或apache使用,咱们以nginx为例,来看一下如何配置。

    1. nginx的配置

    通常,您只需要包含uwsgi_params文件(包含在nginx发行版中),并使用uwsgi_pass指令设置TCP套接字的地址即可

    server {
            # 监听端口
    	listen 80;
    	# 可以是ip地址或域名
    	server_name www.blog.com;
    	# 动态请求nginx转发给uwsgi
    	location / {
    		# 转发端口必须和uwsgi配置文件中socket端口一致
    		uwsgi_pass      127.0.0.1:8000; 
                    include uwsgi_params; 
    	}
    	# 静态资源所在位置,nginx自己处理
    	location /static {
    		alias /var/www/online/static/;
    	}
    }

    nginx安装完毕后,自带一个uwsgi_params文件:

    81679d11e6d97a76ea071da10a4fa175.png
    图2 nginx自带uwsgi_params文件

    uwsgi_params文件内容:

    uwsgi_param  QUERY_STRING       $query_string;
    uwsgi_param  REQUEST_METHOD     $request_method;
    uwsgi_param  CONTENT_TYPE       $content_type;
    uwsgi_param  CONTENT_LENGTH     $content_length;
    
    uwsgi_param  REQUEST_URI        $request_uri;
    uwsgi_param  PATH_INFO          $document_uri;
    uwsgi_param  DOCUMENT_ROOT      $document_root;
    uwsgi_param  SERVER_PROTOCOL    $server_protocol;
    uwsgi_param  REQUEST_SCHEME     $scheme;
    uwsgi_param  HTTPS              $https if_not_empty;
    
    uwsgi_param  REMOTE_ADDR        $remote_addr;
    uwsgi_param  REMOTE_PORT        $remote_port;
    uwsgi_param  SERVER_PORT        $server_port;
    uwsgi_param  SERVER_NAME        $server_name;

    这个文件中包含了转发请求时要携带的内容:查询字符串、请求方法、内容类型等

    修改了配置文件,记得重启nginx服务。

    2. uWsgi服务器配置

    和nginx配合使用,uwsgi是socket套接字的方式启动,而不是以http服务器启动。启动方式有两种:命令行和配置文件。

    • 命令行方式启动
    uwsgi --socket 127.0.0.1:9000 --wsgi-file example.py --master --processes 4 --threads 2 

    但这种方式写起来复杂,易出错,不能重用,所以一般使用这种方式,只是用于调试,一旦调试正确,我们就可以使用配置文件进行配置,命令行的每一个参数对应配置文件的一行。

    • 配置文件

    uwsgi支持以以下几种文件方式加载配置:

    uwsgi --ini http://uwsgi.it/configs/myapp.ini # HTTP
    uwsgi --xml - # standard input
    uwsgi --yaml fd://0 # file descriptor
    uwsgi --json 'exec://nc 192.168.11.2:33000' # arbitrary executabl

    3.INI文件

    .INI文件是许多应用程序使用的标准事实上的配置格式。它由[section]s和key=value对组成。

    [uwsgi]
    socket = 127.0.0.1:9000
    wsgi-file = example.py
    master = true
    threads = 2
    
    [app1]
    .....

    默认情况下,uWSGI使用该[uwsgi]部分,但是您可以在使用语法加载INI文件时指定另一个部分名称filename:section

    uwsgi --ini uconfig.ini:app1 

    注意:

    • 配置文件中空格无所谓,几个都行
    • 以分号或#号开头的是注释
    • 启动使用命令: uwsgi --ini uconfig.ini,等价于 uwsgi uconfig.ini

    4.XML文件

    根节点应为<uwsgi>和选项值文本节点。

    <uwsgi>
      <socket>127.0.0.1:9000</socket>
      <master/>
      <wsgi-file>example.py</wsgi-file>
      <threads>3</threads>
    </uwsgi>

    一个xml文件中可以朵儿<uwsgi>节点,可以通过制定不同id属性加以区分,要选用不同的节,可以再文件名后加冒号再跟id属性。加载xml配置文件:

    # 两种方式等价
    uwsgi myconf.xml
    uwsgi --xml myconf.xml

    5.JSON文件

    JSON文件应表示一个具有一对键值对的对象,键为“ uwsgi”,值为配置变量的对象。支持内置JSON列表,布尔值和数字类型。

    {
      "uwsgi": {
      "socket": ["127.0.0.1:8000"],
      "master": true,
      "workers": 3
      },
      "app1":{
         ....
       }
    }

    加载方式:

    uwsgi --json myconf.json:app1 # 根据节的名字加载

    6.常见参数

    表1中列出了常用配置参数

    1642fce1664ef69371d879bf4b6ab8b0.png
    表1 uwsgi常用配置参数

    uwsgi也可以加载很多插件,其中在python开发中,用得到是python插件,参数:

    88745ae4e16519599083d800390e15ea.png

    下一节中,我们会说一下在Django和Flask项目中如何配置。

    展开全文
  • zynq buildroot编译UWSGI

    2018-11-07 17:10:25
    buildroot: 2018.1 ...下载uwsgi源码包 https://uwsgi-docs.readthedocs.io/en/latest/Download.html https://projects.unbit.it/downloads/uwsgi-2.0.17.1.tar.gz 复制python中pyconfig.h到uwsgi...

    buildroot: 2018.1
    uwsgi: 2.0.17.1

    • 下载uwsgi源码包
        https://uwsgi-docs.readthedocs.io/en/latest/Download.html
        https://projects.unbit.it/downloads/uwsgi-2.0.17.1.tar.gz  
    
    • 复制python中pyconfig.h到uwsgi/plugins/python,并在uwsgi_python.h引用
       #include <uwsgi.h>
       #include <pyconfig.h>
       #include <Python.h>
    
    • 编译
        CC=$BUILDROOT_HOST/bin/arm-xilinx-linux-gnueabi-gcc 
        CPP=$BUILDROOT_HOST/bin/arm-xilinx-linux-gnueabi-cpp 
        LDFLAGS='-L$BUILDROOT_HOST/arm-buildroot-linux-gnueabi/sysroot/usr/lib' 
        CPUCOUNT=2 
        $BUILD_ROOT_HOST/bin/python3 
        uwsgiconfig.py --build
    
    • 相关错误
       plugins/python/uwsgi_python.h:3:10: fatal error: Python.h: 没有那个文件或目录
       error: #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
       Exception: you need a C compiler to build uWSGI
       lib/libz.so: file not recognized: File format not recognized
    
    • 参考
        http://matelakat.blogspot.com/2013/08/cross-compiling-uwsgi-with-buildroot.html
    
    展开全文
  • NGINX和UWSGI的PYTHON烧瓶 内容 应用文件夹 uwsgi.ini nginx_config production_flask.service 用法 app文件夹-它包含完整的应用程序和目录。 请将其初始化为虚拟环境,然后安装该文件夹中包含的requirements.txt ...
  • 今天来看下基于Django开发的应用如何在Centos6环境部署系统环境:Centos6.5 x64软件版本:Django 1.9.5 、uwsgi-2.0.13.1nginx 安装配置(略)请见:...# 从官网下载uwsgi源码包 : http:/...

    今天来看下基于Django开发的应用如何在Centos6环境部署


    系统环境:Centos6.5 x64

    软件版本:Django 1.9.5 、uwsgi-2.0.13.1


    nginx 安装配置(略)请见:http://tchuairen.blog.51cto.com/3848118/1771597


    一、安装uwsgi

    # 安装有两种方式
    
    # 1、源码安装
    
    # 从官网下载uwsgi源码包 : http://uwsgi-docs.readthedocs.io/en/latest/
    
    # 安装编译需要的程序包
    
    yum install libxml2-devel libxml2 -y
    
    cd uwsgi-2.0.13.1
    
    python setup.py install
    
    # 2、使用工具直接安装( pip or easy_install )
    
    pip install uwsgi
    
    # 如果没有mysql库,为保证Django正常工作,需要安装mysql库
    
    pip install mysql-python


    二、测试uwsgi


    准备测试文件

    test1.py

    def application(env, start_response):
         start_response('200 OK',[('Content-Type','text/html')])
         return "uwsgi ok!"


    命令执行

    uwsgi --http :8001 --wsgi-file test1.py
    
    # 浏览器测试 IP:8001


    三、配置uwsgi+Django


    创建Django wsgi文件(路径和manage.py文件同级目录,一般安装了Django会自带。)

    wsgi.py

    import os
    import sys
    
    from django.core.wsgi import get_wsgi_application
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "devops.settings")
    
    application = get_wsgi_application()


    创建 uwsgi 服务主配置文件

    uwsgi.ini

    [uwsgi]
    uid = www                                        # 设置启动的用户组
    gid = www
    
    chdir = /alidata/www/fdcode/devops               # 指定项目目录
    
    module = wsgi                                    # 加载wsgi.py模块
    
    master = true                                    # 启动主进程,一般设置true或 1
    
    processes = 2                                    # 设置启动的进程数
    
    listen = 100                                     # 设置socket监听队列大小,超出队列的请求将会被拒绝
    
    ;socket = /var/run/uwsgi/uwsgi.sock              # 设置socket监听
    
    socket = :9090                                   # 设置端口监听
    
    pidfile = /var/run/uwsgi/uwsgi.pid               # 指定pid文件
    
    vacuum = true                                    # 当服务器退出的时候自动删除unixsocket文件和pid文件。
    
    enable-threads = true                            # 允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程
    
    buffer-size = 32768                              # 设置用于uwsgi包解析的内部缓存区大小为64k。默认是4k。
    
    reload-mercy = 8                                 # 设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)
    
    max-requests = 5000                              # 为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏
    
    limit-as = 512                                   # 通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。
    
    harakiri = 60                                    # 一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)
    
    daemonize = /alidata/log/uwsgi/uwsgi_server.log  # 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器


    启动服务

    uwsgi --ini uwsgi.ini


    另一种配置方式


    当.ini配置文件不好用时,也可以使用xml配置文件

    uwsgi-socket.xml

    <uwsgi>
        <socket>127.0.0.1:8001</socket>          # 设置监听地址:端口,如果监听全部地址则可以这样写 :8001 
        <chdir>/alidata/www/dev/devops</chdir>   # 设置项目目录
        <module>wsgi</module>                    # 加载Django的 wsgi.py 模块
        <processes>2</processes>                 # 设置进程数
        <daemonize>uwsgi.log</daemonize>         # 设置日志文件路径
    </uwsgi>


    启动服务

    uwsgi -x uwsgi-socket.xml


    Nginx 配置文件

    django_nginx.conf

    server {
        listen 80;
        server_name abc.xxx.com;
    
    
        location / {
            rewrite ^/$ /ops01/login/ last;
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:9090;
        }
    
        location /static {
            alias /alidata/www/fdcode/devops/static;
        }
    
    }


    uwsgi各项配置参数详解,请参考 : http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html

    展开全文
  • flask-uwsgi-websocket:u适用于由uWSGI支持的Flask应用程序的高性能WebSocket
  • Docker image with uWSGI and Nginx for Flask web applications in Python 3.6 and above, and Python 2.7 running in a single container. Optionally using Alpine Linux. Description This Docker image allows...
  • 一.uWSGI下载地址 https://uwsgi-docs.readthedocs.io/en/latest/Download.html 二.安装 1.下载 wget https://projects.unbit.it/downloads/uwsgi-2.0.17.1.tar.gz 2.解压 tar -zxvf uwsgi-2.0.17.1.tar.gz ...
  • 安装uwsgi

    2019-02-20 13:08:00
    安装uwsgi 官网参考 获取 uwsgi ...源码安装 uwsgi 需要 gcc 和支持 clang Fedora/Redhat 系统 yum groupinstall "Development Tools" yum install python yum install python-devel python uwsgi...
  • 毕业设计-扩展项目网站-vue + python + flask + uwsgi + nginx + mysql 启动步骤: 启动后台: cd返回 virtualenv --no-site-packages extra_env 点安装-r requirements.txt python run.py 以上开启后台dev环境 ...
  • 烧瓶后端 ...在docker-compose中使用uwsgi和nginx获得安全和高性能的后端 先决条件 安装了码头工人 安装了docker-compose 跑 cd进入目录并执行“ docker-compose up --build”以构建映像并运行容器
  • docker-django-nginx-uwsgi-postgres-tutorial Docker + Django + Nginx + uWSGI + Postgres基本教学-从无到有 教你用建立 + + + :memo: 建议对还不熟的朋友,可以先参考我之前写的 简介 之前介绍过了,这边就不在...
  • workflow-notes:AWS Bash Cassandra Conda Docker Heroku Pandas SQL PySpark Python uWSGI上的注释
  • 问题来源曾经遇到过一个项目涉及到了上传商品图片的问题,而我在限制图片大小的时候,是先把整个图片...但后来觉得,如果图片是先由前端的nginx完全读取后再转发给uwsgi的,那这样判断依然会影响nginx的性能。为此,我
  • BlogApi-docker博客后台原始和docker配置 增加jenkins测试jenkins6
  • 弹性豆茎-nginx-uwsgi-django 在AWS Elastic Beanstalk上运行uWSGI和Nginx的Django示例应用程序。 $ eb init $ eb create ebsample-env -p "Python 2.7" --single --sample 设置环境属性: $ eb setenv ALLOWED_...
  • uWSGI 可以使用plugins 参数支持使用不同的 Python 版本,默认...下面我们将其路径指向/usr/lib/uwsgi:首先下载 uWSGI源码包并解压:wgethttp://projects.unbit.it/downloads/uwsgi-1.4.10.tar.gztarzxvfuwsgi...
  • django-setup:在Ubuntu服务器上使用Nginx和uWSGI设置Django应用程序
  • vim /etc/init.d/uwsgi && chmod +x /etc/init.d/uwsgi DESC="uwsgi daemon" NAME=uwsgi DAEMON=/usr/local/python2.7/bin/uwsgi CONFIGFILE=/etc/$NAME.ini PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/...
  • 例如tiangolo/uwsgi-nginx-flask:python3.7-2019-10-14 。 uwsgi-nginx-烧瓶 带有uWSGI和Nginx的Docker映像,用于Python 3.6及更高版本中的Flask Web应用程序,以及在单个容器中运行的Python 2.7 。 (可选)使用...
  • WSGIWeb-фреймворкнабазеuWSGIсиспользованиемnginx。 Установка 注释:uWSGI在Linux上使用WSGIработаеттолькопод。 sudo apt-get update sudo apt-get ...
  • uwsgi使用

    2012-05-20 00:38:00
    使用了gevent一段时间之后,应用进程占用的内存稳步增长,一不小心就好几百M了,gevent应该存在一些内存泄漏,同时还有一些其他问题, 放到生产环境中很不适合。... 下载源码之后,直接make,得到uwsgi,就可以直...
  • Flask视图高级04-Flask数据库05-Flask知识点补充06-memcached缓存系统07-Redis键值对数据库08-Flask企业级论坛实战项目09-Python web开发核心技术代码和笔记.zip最新更新flask基础到租房项目实战课件与源码租房项目...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 244
精华内容 97
热门标签
关键字:

uwsgi源码