`

关于服务器——安装配置tornado

 
阅读更多

tornado是另一个基于python的服务器框架,虽然不能向django一样给我们提供丰富的“建站工具”,不过它对epoll的支持使得非阻塞特性比较吸引人。下面也简单记录一下安装使用方法。

首先下载安装tornado,运行它还需要安装下面两个库

1,pycurl

2,mysql-python 

 (python setup.py install)

 

tornado没有提供django的manage.py,django-admin.py等工具,直接编码如下

list_publishers.html(模板)

<table>
        {% for p in publishers %}
        <tr>
        <td>Id #{{ p[0] }}</td>
        <td>Name #{{ p[1] }}</td>
        </tr>
        {% end %}
</table>

 web.py(代码)

import tornado.ioloop
import tornado.web
import tornado.database
import sqlite3

def _execute(query):
        dbPath = '/home/ciaos/django.sqlite3'
        connection = sqlite3.connect(dbPath)
        cursorobj = connection.cursor()
        try:
                cursorobj.execute(query)
                result = cursorobj.fetchall()
                connection.commit()
        except Exception:
                raise
        connection.close()
        return result

class Main(tornado.web.RequestHandler):
    def get(self):
        self.write("Main")

class ListPublishers(tornado.web.RequestHandler):
    def get(self):
        query = ''' select * from books_publisher '''
        publishers = _execute(query)
        self.render("list_publishers.html", publishers=publishers)

application = tornado.web.Application([
    (r"/", Main),
    (r"/publishers" , ListPublishers),
],debug=True)

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

 简单用ab测试一下性能,要比django性能高出一倍的样子(不过鉴于两个项目操作数据库的方式有些不一样,还是没有说服力,原因在于没能找到tornado对sqlite的原生支持)

ciaos@linux-53dr:~/mysite2> sudo /usr/sbin/ab2 -c 10 -n 10000 http://127.0.0.1:8888/publishers
root's password:
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        TornadoServer/2.0
Server Hostname:        127.0.0.1
Server Port:            8888

Document Path:          /publishers
Document Length:        63 bytes

Concurrency Level:      10
Time taken for tests:   21.306 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      2190000 bytes
HTML transferred:       630000 bytes
Requests per second:    469.35 [#/sec] (mean)
Time per request:       21.306 [ms] (mean)
Time per request:       2.131 [ms] (mean, across all concurrent requests)
Transfer rate:          100.38 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       7
Processing:     4   21   3.4     20      53
Waiting:        0   20   3.4     19      52
Total:          7   21   3.5     20      56

Percentage of the requests served within a certain time (ms)
  50%     20
  66%     21
  75%     21
  80%     22
  90%     23
  95%     25
  98%     30
  99%     42
 100%     56 (longest request)
 生产环境的配置可以参照 Tornado概览 的介绍
user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    use epoll;
}

http {
    # Enumerate all the Tornado servers here
    upstream frontends {
        server 127.0.0.1:8888;
        server 127.0.0.1:8000;
    }

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log;

    keepalive_timeout 65;
    proxy_read_timeout 200;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    gzip on;
    gzip_min_length 1000;
    gzip_proxied any;
    gzip_types text/plain text/html text/css text/xml
               application/x-javascript application/xml
               application/atom+xml text/javascript;

    # Only retry if there was a communication error, not a timeout
    # on the Tornado server (to avoid propagating "queries of death"
    # to all frontends)
    proxy_next_upstream error;

    server {
        listen 80;

        # Allow file uploads
        client_max_body_size 50M;

        location ^~ /static/ {
            root /var/www;
            if ($query_string) {
                expires max;
            }
        }
        location = /favicon.ico {
            rewrite (.*) /static/favicon.ico;
        }
        location = /robots.txt {
            rewrite (.*) /static/robots.txt;
        }

        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            #proxy_redirect false;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://frontends;
        }
    }
}

 简单的配置,就让我们可以远离老掉牙的php-cgi编程了。简单的mvc代码见附件

分享到:
评论

相关推荐

    Python高效开发实战——Django、Tornado、Flask、Twisted 的随书完整源代码

    本资源提供了四个知名Web框架——Django、Tornado、Flask和Twisted的随书完整源代码,帮助开发者深入理解和实践这些框架,提升开发效率。以下是对这四个框架的详细介绍: 1. Django:Django是一个高级的Python Web...

    Python高效开发实战 Django Tornado Flask Twisted 中文版 完整版 带书签

    《Python高效开发实战》这本书全面覆盖了Python web开发的四大框架——Django、Tornado、Flask和Twisted,旨在帮助读者深入理解并熟练运用这些框架进行高效的Web应用开发。以下将详细介绍这四个框架及其核心知识点。...

    Python-基于Python的博客使用tornado和bootstrap框架开发螺壳网

    本项目以Python为基础,利用Tornado Web服务器框架和Bootstrap前端框架,构建了一个功能完善的博客系统——螺壳网。以下将详细介绍Tornado和Bootstrap在构建CMS内容管理系统中的应用。 ### Tornado框架 Tornado是...

    Python高效开发实战Django+Tornado+Flask+Twisted完整源代码

    在"macos"环境下,这些框架的使用可能会涉及到Homebrew包管理器的安装、Python环境的配置、虚拟环境的创建以及跨平台兼容性问题。学习如何在macOS系统上运行和调试这些项目,有助于开发者提升跨平台开发的能力。 综...

    tornado2-UserGuide

    一、概述:Tornado——嵌入式系统的开发利器 Tornado2作为Wind River Systems公司出品的一款专业工具集,主要用于支持基于VxWorks操作系统的嵌入式软件开发。VxWorks是一款实时操作系统(RTOS),在航空航天、军事、...

    PyPI 官网下载 | tornado_sqlalchemy-0.2.0-py3-none-any.whl

    2. **配置**:在你的Tornado应用中,你需要配置数据库连接,这通常包括数据库引擎、连接池等设置。 3. **定义模型**:使用SQLAlchemy的ORM方式定义数据模型,这涉及到创建继承自`sqlalchemy.ext.declarative....

    QD [v20230821] —— HTTP请求定时任务自动执行框架 base on HAR Editor-qd.zip

    用户需要展开这个文件夹,查看文档(如果有的话)以了解如何安装和配置QD。源代码通常包括主程序、配置文件、示例HAR文件以及可能的库和依赖项。 ### 6. **应用场景** QD框架适用于各种场景,包括但不限于: - ...

    全套百度云教程:python基础+进阶+项目篇 (含Django和Tornado)

    1. **Django安装与配置**:安装Django、创建项目、配置数据库等。 2. **模型层(Model)**:定义数据模型、自定义字段、关系字段等。 3. **视图层(View)**:处理请求、返回响应、使用模板等。 4. **模板系统**:...

    剖析Python的Tornado框架中session支持的实现代码

    本文将深入剖析一个使用memcached实现Tornado session的项目——tornado-memcached-sessions。 首先,我们来看一下`app.py`中的设置。在这个例子中,创建了一个名为`Application`的类,它是`tornado.web....

    SOCRight:云海统一权限管理系统是基于python的tornado框架实现的一个统一权限管理系统

    【云海统一权限管理系统——基于Python的Tornado框架】 在当今信息化社会,权限管理成为企业、组织以及各类系统中不可或缺的重要组成部分。云海统一权限管理系统(SOCRight)就是这样一款高效、安全的解决方案,它...

    PyPI 官网下载 | tornadoes-2.3.2.tar.gz

    安装完成后,即可在Python代码中导入并使用Tornado库,创建Web服务器、WebSocket服务或处理异步请求。 总结,`tornadoes-2.3.2.tar.gz`提供了Tornado库的一个旧版本,它是Python开发中的重要工具,尤其适用于构建高...

    vxWorks开发环境构建步骤及开发资源

    构建VxWorks开发环境涉及安装Tornado集成开发环境、理解和配置相关工具以及熟悉VxWorks的操作和编程模型。以下是对VxWorks开发环境构建的详细说明: 一、Tornado集成开发环境 Tornado是VxWorks的主要开发工具,它...

    Vxworks实验指导书

    目标机服务器——TargetServer** - **3. FTP服务器** - **4. WindSH** - **4.1 启动和关闭WindSh** - **4.2 WindSh的使用**:包括任务管理命令、任务信息命令、系统命令、网络状态显示等。 综上所述,本实验指导...

    Python库 | graia-ariadne-0.3.0.tar.gz

    graia-ariadne是一个强大的图形用户界面(GUI)框架,它基于Tornado异步Web服务器,旨在为Python开发者提供一个简洁、高效的工具来创建现代Web应用程序。该库的核心理念是将前端和后端紧密结合,让开发者能够以类似...

    Python库 | raven_python-1.0.0-py3-none-any.whl

    6. 客户端配置:通过简单的代码配置,可以设置服务器URL、项目ID和其他选项,以定制错误报告的行为。 7. 插件和集成:Raven支持多种框架和库的插件,如Django、Flask、Tornado等,使错误追踪更加无缝。 8. 日志...

Global site tag (gtag.js) - Google Analytics