• uwsgi、virtualenv 、pypy和flask


        当前linux发行版python版本默认基本上都是2.7的,如果系统中有了python3.0以后的,或者自己安装了

    python3.3,但是用pip或者easy_install安装python3的module并不很方面,使用virtualenv就方便多了,

    安装pypy环境较好的办法也是用virtualenv。通过如下:

    virtualenv -p /path/to/python3 dir_name

    当然前提是你安装了virtualenv,如下安装: 

          sudo apt-get install python-virtualenv或者sudo pip install virtualenv。

    用virtualenv会在当前目录中生成dir_name目录,这样就生成了python3的虚拟环境,具体使用就不啰嗦了,

    毕竟virtualenv网上介绍的很多了。

       那么同样的方法我们用virtualenv -p /path/to/pypy virtualpypy,创建一个virtualpypy目录。进入

    virtualpypy,然后source bin/activate,在使用pip或者easy_install安装的库就可以了,比如安装了flask,

    想让uwsgi运行起来有点麻烦,需要用pip在虚拟环境中安装uwsgi:pip install uwsgi,这样会编译一个

    适合pypy的uwsgi。

     uwsgi.xml文件如下:

     1 <uwsgi>
     2   <socket>0.0.0.0:6001</socket>
     3   <listen>20</listen>
     4   <chdir>/path/to/virtualpypy</chdir>
     5 <pythonpath>/path/to/virtualpypy</pythonpath>
     6 <virtualenv>/path/to/virtualpypy</virtualenv>
     7 <processes>3</processes>
     8   <master>true</master>
     9   <pidfile>/path/to/virtualpypy/uwsgi.pid</pidfile>
    10   <wsgi-file>/path/to/virtualpypy/application.py</wsgi-file>
    11   <profiler>true</profiler>
    12   <memory-report>true</memory-report>
    13   <enable-threads>true</enable-threads>
    14 <no-site>true</no-site>
    15 <pypy-lib>/path/to/virtualpypy/libpypy-c.so</pypy-lib>
    16   <logdate>true</logdate>
    17   <limit-as>6048</limit-as>
    18 </uwsgi>

             注意第15行,如果没有libpypy-c.so这个动态链接库,uwsgi -x uwsgi.xml就会报错。

    我们就需要下载或者编译一个libpypy-c.so。

    下载http://projects.unbit.it/downloads/pypy/libpypy-c-x86_64.so

    编译就需要下载pypy源码tarball了,本人用的pypy-2.3.1,

    ./rpython/bin/rpython -Ojit --shared --gcrootfinder=shadowstack pypy/goal/targetpypystandalone

           本人4G内存,64位机花费了1小时多编译完成。会生成libpypy-c.so和pypy-c两个重要的文件。

    既然网上提供了为何还要费劲编译,这就是问题所在,由于用apt-get安装的pypy版本与从网上下载先来的

    libpypy-c-x86_64.so可能版本不同导致出现下面的错误:

    debug: OperationError:

    debug:  operror-type: AssertionError

    debug:  operror-value: 

           所以如果没有出错最好,出错了还是编译一个吧,把libpypy-c.so放到动态链接路的默认路径下或者

    LD_LIBRARY_PATH环境变量里。把pypy-c利用virtualenv -p /path/to/pypy-c virtualnew创建虚拟环境,

    再同上面的方法安装flask或者django、uwsgi.

    Wed Jun 25 00:41:26 2014 - uwsgi socket 0 bound to TCP address 0.0.0.0:6001 fd 3
    Initialized PyPy with Python 2.7.6 (32f35069a16d819b58c1b6efb17c44e3e53397b2, Jun 23 2014, 15:54:22)
    [PyPy 2.3.1 with GCC 4.8.2]
    PyPy Home: /path/to/virtualnew
    Wed Jun 25 00:41:27 2014 - your server socket listen backlog is limited to 20 connections
    Wed Jun 25 00:41:27 2014 - your mercy for graceful operations on workers is 60 seconds
    Wed Jun 25 00:41:27 2014 - mapped 291072 bytes (284 KB) for 3 cores
    Wed Jun 25 00:41:27 2014 - *** Operational MODE: preforking ***
    Wed Jun 25 00:41:27 2014 - *** no app loaded. going in full dynamic mode ***
    Wed Jun 25 00:41:27 2014 - *** uWSGI is running in multiple interpreter mode ***
    Wed Jun 25 00:41:27 2014 - spawned uWSGI master process (pid: 1566)
    Wed Jun 25 00:41:27 2014 - spawned uWSGI worker 1 (pid: 1569, cores: 1)
    Wed Jun 25 00:41:27 2014 - spawned uWSGI worker 2 (pid: 1570, cores: 1)
    Wed Jun 25 00:41:27 2014 - spawned uWSGI worker 3 (pid: 1571, cores: 1)

         pypy终于可以好好用用了,看上面红色两行可知pypy 2.3.1对应python 2.7.6。本人对pypy有

    着相当的好感,它不仅在运行flask、django等项目上比python要快(之前的文章本人就介绍过pypy与

    python计算斐波那契数列时间的比较,差了可谓一条街的距离),并且它是python开发的(rpython)。

    就像java、go等许多高级语言一样,最初虽然是c开发的,但最后都是回到了自己解释自己。

         虽然pypy现在还有诸多问题,虽然官方python依旧是c开发的 ,但是本人希望pypy更好的发展。

         只为您的快、只为您是python写的python解释器。

  • 相关阅读:
    算法(Algorithms)第4版 练习 1.3.4
    算法(Algorithms)第4版 练习 1.3.5
    算法(Algorithms)第4版 练习 1.3.6
    微服务迁移步骤建议
    xxxx interview问题解读与总结
    乐观锁与悲观锁——解决并发问题
    编码解码--三种常见字符编码简介:ASCII、Unicode和UTF-8
    编码解码--url编码解码
    分页缓存预加载算法
    Could not initialize class sun.awt.X11FontManager 异常问题
  • 原文地址:https://www.cnblogs.com/wuchaofan/p/3800902.html
Copyright © 2020-2023  润新知