Tornado Web Server框架编写简易Python服务器


Posted in Python onJuly 28, 2018

我们都知道在Web开发中,都需要服务器,比如Java Web开发的Tomcat,WebLogic,WebSphere,现在来看利用Tornado Web Server框架如何写一个简易的Python服务器。

一般来说只需要实现get和post方法就可以了。以上次使用redis数据库的例子说明,数据库插入代码如下:

import redis
import datetime
 
class Database:
  def __init__(self):
    self.host = 'localhost'
    self.port = 6379
    self.write_pool = {}
 
  def add_write(self,website,city,year,month,day,deal_number):
    key = '_'.join([website,city,str(year),str(month),str(day)])
    val = deal_number
    self.write_pool[key] = val
 
  def batch_write(self):
    try:
      r = redis.StrictRedis(host=self.host,port=self.port)
      r.mset(self.write_pool)
    except Exception, exception:
      print exception
      
 
def add_data():
  beg = datetime.datetime.now()
  db = Database()
  for i in range(1,10000):
    db.add_write('meituan','beijing',2013,i,1,i)
  db.batch_write()
  end = datetime.datetime.now()
  print end-beg
      
if __name__ == '__main__':
  add_data()

以上代码插入了数据,那么现在用我们的服务器来访问一些数据。

import json
import redis
import tornado.web
import tornado.httpserver
from tornado.options import define, options
 
define("port", default=8888, type=int)
 
class DealHandler(tornado.web.RequestHandler):
  def initialize(self):
    self.port = 6379
    self.host = "localhost"
 
  def get(self):
    website = self.get_argument("website",None)
    city  = self.get_argument("city",None)
    year  = self.get_argument("year",None)
    month  = self.get_argument("month",None)
 
    keyset = []
    for i in range(1,31):
      key = '_'.join([website,city,year,month,str(i)])
      keyset.append(key)
 
    r = redis.StrictRedis(host=self.host,port=self.port)
    self.write( json.dumps(r.mget(keyset)) )
 
class ExampleHandler(tornado.web.RequestHandler):
  def get(self):
    who = self.get_argument("who", None)
    if who:
      self.write("Hello, " + who)
    else:
      self.write("Hello World!")
    
  def post(self):
    who = self.get_argument("who", None)
    if who:
      self.write("Hello, " + who)
    else:
      self.write("Hello World!")
 
class Application(tornado.web.Application):
  def __init__(self):
    handlers = [
      (r"/", ExampleHandler),
      (r"/deal", DealHandler),
    ]
    settings = dict()
    tornado.web.Application.__init__(self, handlers, settings)
 
def create_server():
  tornado.options.parse_command_line()
  http_server = tornado.httpserver.HTTPServer(Application())
  http_server.listen(options.port)
  tornado.ioloop.IOLoop.instance().start()
 
if __name__ == "__main__":
  create_server()

以上代码实现了一个简单的服务器,用于处理http请求。

在浏览器中输入:

http://localhost:8888/deal?website=meituan&city=beijing&year=2013&month=9

即可得到需要的数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python操作MySQL简单实现方法
Jan 26 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
Jul 11 Python
pandas数值计算与排序方法
Apr 12 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
python爬虫实例详解
Jun 19 Python
Python实现自动访问网页的例子
Feb 21 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
Python2及Python3如何实现兼容切换
Sep 01 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 Python
python os.listdir()乱码解决方案
Jan 31 Python
pandas数值排序的实现实例
Jul 25 Python
python使用tornado实现登录和登出
Jul 28 #Python
基于python实现简单日历
Jul 28 #Python
python使用tcp实现局域网内文件传输
Mar 20 #Python
基于python3实现socket文件传输和校验
Jul 28 #Python
python多进程实现文件下载传输功能
Jul 28 #Python
python如何生成网页验证码
Jul 28 #Python
python3利用tcp实现文件夹远程传输
Jul 28 #Python
You might like
PL-880隐藏功能
2021/03/01 无线电
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
JS常用表单验证方法总结
2014/05/22 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
简单了解JS打开url的方法
2020/02/21 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
js实现轮播图特效
2020/05/28 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
python实现的各种排序算法代码
2013/03/04 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
Python多进程原理与用法分析
2018/08/21 Python
Python使用folium excel绘制point
2019/01/03 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
优秀干部获奖感言
2014/01/31 职场文书
公司担保书范文
2014/05/21 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫