I did a demo about how to deploy other python apps served by a 'supervisord' daemon processor on github.

Here is the link. http://github.com/xros/supervisord_start_all

There are serveral torando apps there.

Here's a brife introduction of one of the tornado apps.

demo.py

would look like this:

#!/usr/bin/env python
#coding=utf-8
# 从2014年4月2日开始维护
"""主要用于测试supervisord 的内容 """
import uuid
import hashlib
import json
import base64
import torndb
import MySQLdb
import tornado.ioloop
import tornado.web
import tornado.httpserver
from tornado.options import define, options
# This is vital for JSON dumps the method: __default
from datetime import date, datetime, timedelta
import logging # define 完成后,同时生成一个options里面的属性,在下面方便 torndb.Connection
define("port", default=8000, help="run on the given port", type=int)
define("mysql_host", default="127.0.0.1:3306", help="database host")
define("mysql_database", default="mysql", help="database name")
define("mysql_user", default="root", help="database user")
define("mysql_password", default="", help="database password")
define("secret", default="secret_pass", help="secret key") db = torndb.Connection(
host=options.mysql_host, database=options.mysql_database,
user=options.mysql_user, password=options.mysql_password,time_zone="+8:00") def get_token():
"""
Generate a hash that can be used as an application secret
"""
hash = hashlib.sha1(str(uuid.uuid1()))
hash.update(options.secret)
return hash.hexdigest() def __default(obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, date):
return obj.strftime('%Y-%m-%d')
else:
raise TypeError('%r is not JSON serializable' % obj) def json_dumps(s):
""" """
return json.dumps(s,ensure_ascii=False,default=__default) def get_now():
# 得到现在的时间,例如:
# '2013-12-31 12:29:54'
# 上海在东八区
#local_time = datetime.now() + timedelta(hours=8)
local_time = datetime.now()
ISOTIMEFORMAT = '%Y-%m-%d %X'
return local_time.strftime(ISOTIMEFORMAT) class BaseHandler(tornado.web.RequestHandler):
# set the header for json
def initialize(self):
self.set_header("Content-Type", "application/json; charset=UTF-8")
@property
def db(self):
if not hasattr(self, "_db"):
self._db = torndb.Connection(
host=options.mysql_host, database=options.mysql_database,
user=options.mysql_user, password=options.mysql_password,time_zone="+8:00")
return self._db
def write_error(self, status_code, **kwargs):
if status_code==500:
ret = {"ret":"","msg":u"系统出错!!"}
self.write(json_dumps(ret))
return
else:
super(BaseHandler, self).write_error(status_code, **kwargs) class TestPage1Handler(BaseHandler):
def get(self, *args, **kwargs):
ret = {'msg':'', 'ret':""}
try:
sql1 = "SELECT User FROM user WHERE Host='127.0.0.1'"
db_username = self.db.get(sql1)
except Exception as e:
ret = {'msg':'Database error', 'ret':""}
self.write(json_dumps(ret))
return
else:
ret['result'] = {"test":"okay"}
ret['result'].update({'db_username': db_username['User']})
logging.info('A request to test page 1')
self.write(json_dumps(ret))
return class TestPage2Handler(BaseHandler):
def get(self, *args, **kwargs):
ret = {'msg':'', 'ret':""}
logging.info('A request to test page 2')
self.write(json_dumps(ret))
return class Application(tornado.web.Application):
def __init__(self):
handlers = [
# 测试 torndb 效率
(r"/testpage1", TestPage1Handler), # 测试
(r"/testpage2", TestPage2Handler), # 测试 #(r"/update/dealer/profile", UpdateProfileHandler)
#(r"")
] settings = dict(
cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
debug=True,
)
tornado.web.Application.__init__(self, handlers, **settings) def main():
tornado.options.parse_command_line()
http_server = tornado.httpserver.HTTPServer(Application(),no_keep_alive=True)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start() if __name__ == "__main__":
main()

About how to start those apps.

Just need this:

1) download the demo package to '/var/opt'

2) run '$ sudo ./start_daemon.sh

[ Notice ] The file 'daemon.conf' which contains many things about those apps' setting options should be edited every time new apps are added.

For more information, please go to visit http://github.com/xros/supervisord_start_all

python supervisor demo deployment的更多相关文章

  1. python supervisor使用

    Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...

  2. RSA签名 python PHP demo 例子

    python RSA+MD5签名demo: #!/usr/bin/env python2.7 #coding:utf-8 import base64 from Crypto.PublicKey imp ...

  3. python supervisor进程监控工具的使用

    supervisor —— a process control system 另外一个类似 supervisor的工具,因为supervisor 不兼容python3, !!! Circus Proc ...

  4. 学习python登录demo

    要求编写登录接口 : 1. 输入用户名和密码 2.认证成功后显示欢迎信息 3.用户名输错,提示用户不存在,重新输入(5次错误,提示尝试次数过多,退出程序) 4.用户名正确,密码错误,提示密码错误,重新 ...

  5. python购物车demo

    product_list = [        ('Iphone',11800),        ('Mac Pro',13800),        ('BMW CAR',480000),      ...

  6. python flask demo

    from flask import Flask, jsonify from flask import abort from flask import make_response from flask ...

  7. python redis demo

    上代码,redis-demo #!/usr/bin/env python #_*_ coding:UTF-8 _*_ import redis ####配置参数 host = '192.168.0.1 ...

  8. python thrift demo

    简介Thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++, Java, Python, PHP, Ruby, Erlang, Perl, Hask ...

  9. python Quicksort demo

    __author__ = 'student' ''' quicksort step 1, choose one pivot, such as pivot=la[0] step 2, scan the ...

随机推荐

  1. sql server、c# 命名规范

    查了不少资料,没有我想要的. 还不如下载 官方的 数据 Northwind ,pubs 参见 https://www.microsoft.com/en-us/download/confirmation ...

  2. ASP.NET 5 :读写数据库连接字符串

    ASP.NET 5 :读写数据库连接字符串 1.概述 ASP.NET 5模板项目配置文件采用了JSON格式,你依然可以采用以前的xml格式.C#对web.config或app.config读写及加密有 ...

  3. selenium之多线程启动grid分布式测试框架封装(三)

    七.工具类,线程监控器类创建 utils包中,创建java类:RemoteThreadStatusMonitor.java package com.lingfeng.utils; /** * 此监控器 ...

  4. 解决wps for linux 中文输入法光标不跟随的问题

    需要安装qt4-qtconfig和ibus-qt4,安装ibus-qt4之后才能在qt4-qtconfig“界面”选项卡默认输入法选项中看到ibus,选定它,然后设置XIM输入风格为光标跟随风格,保存 ...

  5. Android Studio设置自己主动编project

    在Eclipse自己主动编译兄弟习惯,刚搬到Android Studio.当然,错过这个功能,自己主动编译每次执行意味着更短的时间. Android Studio里面事实上也是有自己主动编译功能的,只 ...

  6. Web学习-apache视图log刊物

    视图apache刊物 apache日志位置 不同的系统位置不同. widnows 假如是windows的话,xampp下应该是都存在的,直接去找apache的folder/log/access.log ...

  7. 处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 解决办法:以管理员运行命令:C: ...

  8. 最佳新秀Java(22)——再次了解泛型

    仿制药Java SE 1.5新功能.通用自然是参数化类型.即操作数据类型被指定为一个参数.这样的参数类型可以在课堂上使用.创建的接口和方法,他们被称为通用类..泛型方法. Java语言引入泛型的优点是 ...

  9. C#中的深复制与浅复制

    C#中分为值类型和引用类型,值类型的变量直接包含其数据,而引用类型的变量则存储对象的引用. 对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响到另一个变量.如 class Progra ...

  10. 建立Ftp站点

    建立Ftp站点步骤: 1.首先创建一个用户 我的电脑右键->管理->本地用户和组->用户->“右键”新建用户->输入用户名和密码再点创建就行了! 2.其次是在C盘新建文件 ...