`
iyuan
  • 浏览: 470008 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于uwsgi+gevent+web.py的备忘

阅读更多
简单入门:
uwsgi:nginx般的优雅控制
gevent:高效、无缝的接入
web.py:简洁

关于uwsgi+web.py:
import web

urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:
    def GET(self, name):
        if not name:
            name = 'World'
        return 'Hello, ' + name + '!'

application = app.wsgifunc()

执行:
./uwsgi -s /tmp/web.py.socket -w testapp


关于uwsgi+gevent:
import gevent
import gevent.socket

def bg_task():
    for i in range(1,10):
        print "background task", i
        gevent.sleep(2)

def long_task():
    for i in range(1,10):
        print i
        gevent.sleep()

def application(e, sr):

    sr('200 OK', [('Content-Type','text/html')])

    t = gevent.spawn(long_task)

    t.join()

    yield "sleeping for 3 seconds...<br/>"

    gevent.sleep(3)

    yield "done<br>"

    yield "getting some ips...<br/>"

    urls = ['www.google.com', 'www.example.com', 'www.python.org', 'projects.unbit.it']
    jobs = [gevent.spawn(gevent.socket.gethostbyname, url) for url in urls]
    gevent.joinall(jobs, timeout=2)

    for j in jobs:
        yield "ip = %s<br/>" % j.value

    # this task will goes on after request end
    gevent.spawn(bg_task)

执行:
uwsgi --loop gevent --socket :3031 --module myapp --async 100


关于gevent+web.py:
from gevent import monkey; monkey.patch_all()
from gevent.wsgi import WSGIServer
import gevent
import web

urls = ("/", "index",
        '/long', 'long_polling')


class index:
    def GET(self):
        return 'Hello, world!<br>[url=/long]/long[/url]'


class long_polling:
    def GET(self):
        print 'handling GET context id = %s' % (id(web.ctx._getd()), )
        gevent.sleep(10)  # possible to block the request indefinitely, without harming others
        return 'Hello, 10 seconds later'

if __name__ == "__main__":
    application = web.application(urls, globals()).wsgifunc()
    print 'Serving on 8088...'
    WSGIServer(('', 8088), application).serve_forever()

执行:
python model.py


三合一:
from gevent import monkey; monkey.patch_all()
from gevent.wsgi import WSGIServer
import gevent
import web

urls = ("/", "index",
        '/long', 'long_polling')


class index:
    def GET(self):
        return 'Hello, world!<br>[url=/long]/long[/url]'


class long_polling:
    def GET(self):
        print 'handling GET context id = %s' % (id(web.ctx._getd()), )
        gevent.sleep(10)  # possible to block the request indefinitely, without harming others
        return 'Hello, 10 seconds later'


application = web.application(urls, globals()).wsgifunc()
#print 'Serving on 8088...'
#WSGIServer(('', 8088), application).serve_forever()
#注释掉,就这么简单

执行:
uwsgi --loop gevent --socket :3031 --module myapp --async 100


注意:
uwsgi只支持gevent1.0以上版本,而gevent目前的stable还没有升上去,要尝新的话得要担风险。

另,我在编译uwsgi+gevent plugin时出了点问题:
引用

cc1: warnings being treated as errors
> plugins/gevent/gevent.c: In function ‘py_uwsgi_gevent_request’:
> plugins/gevent/gevent.c:190: warning: suggest explicit braces to avoid
> ambiguous ‘else’
> plugins/gevent/gevent.c:190: warning: suggest explicit braces to avoid
> ambiguous ‘else’
> plugins/gevent/gevent.c:199: warning: suggest explicit braces to avoid
> ambiguous ‘else’
> plugins/gevent/gevent.c:199: warning: suggest explicit braces to avoid
> ambiguous ‘else’
> plugins/gevent/gevent.c:216: warning: suggest explicit braces to avoid
> ambiguous ‘else’
> plugins/gevent/gevent.c:216: warning: suggest explicit braces to avoid
> ambiguous ‘else’
> make: *** [all] Error 1

这可能是gcc版本有点旧,可以用这个补丁:http://projects.unbit.it/hg/uwsgi-1.0/rev/9943f97612f2(感谢Roberto的帮助)

留此备忘,静待稳定版
0
0
分享到:
评论

相关推荐

    Nginx + uwsgi + web.py 搭建web服务器

    Nginx + uwsgi + web.py 搭建web服务器, 也包含一整套python服务器后台框架代码,简单方便,容易搭建。

    毕业设计-外包项目网站 -vue+python+flask+uwsgi+nginx+mysql.zip

    -vue+python+flask+uwsgi+nginx+mysql.zip毕业设计-外包项目网站 -vue+python+flask+uwsgi+nginx+mysql.zip毕业设计-外包项目网站 -vue+python+flask+uwsgi+nginx+mysql.zip毕业设计-外包项目网站 -vue+python+flask...

    用uwsgi+daphne+Nginx+supervisor部署Django项目.docx

    ### 使用uwsgi+daphne+Nginx+supervisor部署Django项目的详细步骤 #### 一、概述 在本文档中,我们将详细介绍如何在Linux环境下利用uwsgi、daphne、Nginx以及supervisor来部署Django项目。这种方式能够有效地提高...

    阿里云部署python+flask+uwsgi+gevent+nginx

    总的来说,这个部署流程涉及到了用户管理、Python环境搭建、Web服务组件(uwsgi、gevent)、反向代理(nginx)以及安全配置等多个方面。通过这样的部署,可以构建一个稳定、高效的Python Flask服务,适用于轻量级的...

    py2+web.py.rar

    8. **性能优化与安全考虑**:在生产环境中,可能需要考虑使用WSGI服务器(如uWSGI或Gunicorn)替代Web.py内置的开发服务器,以提高性能和稳定性。同时,应确保安装必要的安全补丁,考虑使用HTTPS加密通信,并限制...

    flask+uwsgi+nginx部署.pdf

    ### Flask+uWSGI+Nginx 部署详解 #### 一、环境搭建与配置 根据提供的信息,本文档将详细介绍如何通过CentOS安装Python 3.7,并结合使用uWSGI和Nginx来部署一个基于Flask的应用。 ##### 1.1 安装Python 3.7 **...

    腾讯云部署Django+Nginx+uWSGI+SimpleUI.解决 .svg文件不能显示问题

    首先,Django是一个Python开发的高级Web框架,用于构建高效、可扩展的Web应用。而uWSGI是一个高性能的应用服务器,能够处理WSGI协议,使得Django应用可以被部署。SimpleUI则是一个Django管理界面的美化插件,提供了...

    Nginx+Uwsgi+Django+Vue部署

    Nginx+Uwsgi+Django(python3)+Vue部署,一步步实现。网上找了N多篇文章都没成功,特意记录,以免其他同学踩坑

    微信支付,flask+vue3+elementplus,docker+uwsgi+gevent高并发部署

    整个系统通过Docker进行容器化部署,借助uWSGI和Gevent实现高并发处理,确保服务的稳定性和效率。同时,H5页面则提供了移动端的支付体验。这样的架构设计使得开发、部署和维护变得更加便捷,同时也具备良好的扩展性...

    云服务器部署Python项目(nginx+uwsgi+mysql+项目).pdf

    在ubuntu系统中通过nginx、uwsgi部署一个Python网站

    基于vue+python+flask+uwsgi+nginx+mysql的外包项目网站项目源码.zip

    1、基于vue+python+flask+uwsgi+nginx+mysql的外包项目网站项目源码.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为...

    用Django全栈开发——29. 部署之阿里云CentOS+Nginx+uWsgi+Django.html

    阿里云CentOS+Nginx+uWsgi+Django部署Django,《用Django全栈开发》系列文章最后一篇,感兴趣的同学可以查看。

    django+uwsgi+nginx部署文档.docx

    【Django+Uwsgi+Nginx 部署详解】 Django 是一个高级的 Python Web 开发框架,它提供了一整套工具用于构建高效、可扩展的 Web 应用程序。Uwsgi 是一个高性能的服务器,它实现了 WSGI(Web Server Gateway Interface...

    部署python flask项目到云服务器(flask+mysql+uwsgi+nginx)

    部署python flask项目到云服务器 这是我第一次写博客,写的不好请多多见谅。 操作环境是ubuntu16.04,使用xshell和xftp工具,记得进入root用户,如果没有需要设置,怎么设置后面更新。 Python 3.5.2(自带的,需要...

    五步教你实现使用Nginx+uWSGI+Django方法部署Django程序1

    五步教你实现使用Nginx+uWSGI+Django方法部署...本文主要介绍了使用Nginx+uWSGI+Django方法部署Django程序的五个步骤,包括环境介绍、安装uwsgi、测试uwsgi、配置Django和连接Django和uwsgi,实现简单的WEB服务器。

    CentOS+nginx+uwsgi+Python 多站点环境搭建.docx

    CentOS+nginx+uwsgi+Python 多站点环境搭建 本文档介绍了如何在 CentOS 操作系统上搭建多站点环境,使用 nginx 作为 Web 服务器,uwsgi 作为 WSGI 服务器,Python 作为后端语言。该环境搭建适合大多数 Web 应用...

    毕业设计 --外包项目网站 -- vue+python+flask+uwsgi+nginx.zip

    标题中的“毕业设计 --外包项目网站 -- vue+python+flask+uwsgi+nginx.zip”表明这是一个关于毕业设计的项目,主要技术栈包括Vue.js、Python、Flask、uWSGI以及Nginx。这个项目可能是一个外包性质的管理系统的开发,...

    简单而直接的Python web 框架:web.py.docx

    你可以使用WSGI服务器(如uWSGI或Gunicorn)来运行web.py应用。此外,web.py支持中间件,允许你扩展其功能,如日志记录、身份验证或缓存管理。 总的来说,web.py是一个功能齐全、易于学习的Python Web框架,适合...

Global site tag (gtag.js) - Google Analytics