tornado多进程模式不同进程写不同日志
#coding: utf-
'''
Author:
Time:
Target:
''' import logging
import logging.handlers
import os
import json
import tornado.httpserver
import tornado.ioloop
import tornado.web
from tornado.options import define, options
import time
import gc define("port", default=, help="Please send email to me", type=int) def init_log(log_filename, pattern='test'):
'''
记录log日志
:param log_filename:日志记录名
:param pattern: 类型
:return:
'''
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
logger = logging.getLogger()
if pattern == 'production':
fh = logging.handlers.TimedRotatingFileHandler(
filename=log_filename, when='midnight')
fh.suffix = '%Y%m%d.log'
logger.setLevel(logging.INFO)
elif pattern == 'rotating_test':
fh = logging.handlers.TimedRotatingFileHandler(
filename=log_filename, when='M')
fh.suffix = '%Y%m%d-%H%M.log'
logger.setLevel(logging.DEBUG)
elif pattern == 'test':
fh = logging.FileHandler(filename=log_filename, mode='w')
logger.setLevel(logging.DEBUG)
else:
#print('No Legal Pattern')
raise TypeError
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(
handlers = [
(r"/update", update),
(r"/Cleantext",clean)
]
)
'''
# 第一种多进程启动模式
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
http_server.start()
#http_server.start()
tornado.ioloop.IOLoop.instance().start() ''' # 第二种多进程启动模式
sockets = tornado.netutil.bind_sockets(options.port)
task_id = tornado.process.fork_processes()
#取到的task_id 是0~3。os.getpid()取子进程ID,os.getppid()取父进程ID
if task_id is None:
task_id = str(os.getpid()) + "_" + str(os.getppid()) http_server = tornado.httpserver.HTTPServer(app)
http_server.add_sockets(sockets) #global LOGGER
LOG_FOLDER = './server_%s_log'%(options.port)
if not os.path.exists(LOG_FOLDER):
os.makedirs(LOG_FOLDER)
LOG_PATH = os.path.join(LOG_FOLDER, 'ServerLog')
# print(LOG_PATH)
# 每个子进程自己创建一个日志文件
LOGGER = init_log(LOG_PATH + str(task_id) , pattern='production') tornado.ioloop.IOLoop.instance().start()
class update(tornado.web.RequestHandler): def post(self): result = {
'status': 'success'
} post_data = self.request.body
time1=time.time()
post_data=post_data.decode('utf-8')
try:
post_data=json.loads(post_data)
except Exception as e:
post_data=post_data.replace('\n','').replace('\r','')
post_data = json.loads(post_data) #print(post_data)
channel=post_data['channel']
#print(channel)
sentence=post_data['content'] self.write(json.dumps(post_data))
self.add_header('Content-Type', 'application/json') time2=time.time()
LOGGER.info('INFO 200 POST/clean %2.5f ms'%(*(time2-time1)))
tornado多进程模式不同进程写不同日志的更多相关文章
- tornado 多进程模式
https://www.douban.com/note/217901726/ 官方文档的helloworld实例中的启动方法: if __name__ == "__main__": ...
- 不得不注意tornado多进程部署的副作用
tornado多进程启动时,采用的是fork的方式. 一个现有进程可以调用fork函数创建一个新进程.由fork创建的新进程被称为子进程(child process).fork函数被调用一次但返回两次 ...
- 0704 Process继承实现多进程、Pool进程池,进程间通过队列通信,Pool实现多进程实现复制文件
通过继承的方式,实现Process多进程 from multiprocessing import Process import time class MyNewProcess(Process): de ...
- 多进程 multiprocessing 模块进程并发Process;Pool ;Queue队列 、threading模块;
multiprocessing 模块中的 Process类提供了跨平台的多进程功能,在windows和linux系统都可以使用. 1.首先要实例化一个类,传入要执行的函数. 实例名 = Process ...
- SQLite 预写式日志
SQLite在3.7.0版本引入了WAL (Write-Ahead-Logging),WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制,引入WAL机制之 ...
- C#写文本日志帮助类(支持多线程)
代码: using System; using System.Configuration; using System.IO; using System.Threading.Tasks; namespa ...
- 结合FireBreath在Chrome/FireFox的多进程模式下崩溃一例
FireBreath是跨浏览器跨操作系统的插件方案,它封装了ActiveX和NPAPI的插件接口,使用统一的API来暴露JSAPI.Chrome和FireFox使用NPAPI,IE使用ActiveX. ...
- Node.js - 阿里Egg的多进程模型和进程间通讯
前言 最近用Egg作为底层框架开发项目,好奇其多进程模型的管理实现,于是学习了解了一些东西,顺便记录下来.文章如有错误, 请轻喷 为什么需要多进程 伴随科技的发展, 现在的服务器基本上都是多核cpu的 ...
- php实现多进程和关闭进程
一.php实现多进程 PHP有个pcntl_fork的函数可以实现多进程,但要加载pcntl拓展,而且只有在linux下才能编译这个拓展. 先代码: <?php$arr = ['30000000 ...
随机推荐
- OpenFire后台插件上传获取webshell及免密码登录linux服务器
1.目标获取 (1)fofa.so网站使用搜索body="Openfire, 版本: " && country=JP,可以获取日本存在的Openfire服务器.如图 ...
- XML简述
XML简述 本文主要内容都是在中国大学MOOC上学习的,这里做个记录. 课程:Java核心技术(进阶),华东师范大学 陈良育老师 感谢陈良育老师,在他的慕课上受益匪浅. XML基本概念 XML(eXt ...
- Spark(火花)快速、通用的大数据处理引擎框架
一.什么是Spark(火花)? 是一种快速.通用处理大数据分析的框架引擎. 二.Spark的四大特性 1.快速:Spark内存上采用DAG(有向无环图)执行引擎非循环数据流和内存计算支持. 内存上比M ...
- Golang: 解析JSON数据之一
JSON 作为目前最流行的数据传输格式, 相信每个程序员都跟它打过交道吧.使用 Go 语言时,也不可避免的要操作 JSON 数据,令人惊喜的是,Go 内置了序列化和反序列化 JSON 的功能,今天就来 ...
- MySQL Table--独立表空间
数据库表空间 独立表空间 在MySQL 5.6 中引入独立表空间的概念,启用独立表空间后,每个表将生成独立的文件来进行存储. 创建表时可以指定表存放的文件路径 ##首选需要确保innodb_file_ ...
- 【前端_js】Bootstrap之表单验证
Bootstrap表单验证插件bootstrapValidator使用方法整理 BootstrapValidator 表单验证超详细教程
- Spark-Bench 测试教程
Spark-Bench 教程 本文原始地址:https://sitoi.cn/posts/19752.html 系统环境配置 操作系统:centos7 环境要求:安装 JDK, Hadoop, Spa ...
- 【VNCserver】Centos7.4安装VNC连接华为云或亚马逊云
1.1 文档背景 CentOS 7 / RHEL 7部署图形化界面 安装VNCserver实现linux系统云主机桌面化,通过普通用户实现桌面化操作 2. Vncserver服务端部署 2.1 安装 ...
- nginx.从路人到入门
nginx 提供各种各样的服务器功能,本文记录 nginx 最基础的操作: 开启.停止.重载配置 静态文件服务器 反向代理 本文操作系统环境为 ubuntu18 安装 官方安装指导 开启.停止.重载配 ...
- PAT甲级1017题解——模拟排序
题目分析: 本题我第一次尝试去做的时候用的是优先队列,但是效率不仅代码量很大,而且还有测试样例过不去,很显然没有找到一个好的数据结构来解决这道题目(随着逐渐的刷PAT甲级的题会发现有时选择一个好的解题 ...