#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)))

最新文章

  1. 在传统.NET Framework 上运行ASP.NET Core项目
  2. static成员变量与返回对象的引用
  3. EasyUi – 6.easyui常见问题
  4. 20145215实验五 Java网络编程及安全
  5. Sign-Magnitude Representation
  6. ES6 — 数组Array
  7. Demo学习: ColumnSort
  8. Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)
  9. android快捷简单的实现音乐播放器
  10. 基础 ADO.NET 访问MYSQL 与 MSSQL 数据库例子
  11. android图形基础知识
  12. 关于” fatal error C1010: unexpected end of file while looking forprecompiled header directive”问题
  13. 怎么监控apache运行状态和页面统计
  14. WdatePicker-限制日期选择
  15. 【PAT】B1014 福尔摩斯的约会
  16. java多线程快速入门(十四)
  17. Spring 系列教程之 bean 的加载
  18. vue之给a标签赋值
  19. hdu1024 Max Sum Plus Plus[降维优化好题(貌似以后可以不用单调队列了)]
  20. java并发编程实战:第四章----对象的组合

热门文章

  1. Object-C与标准C/C++混合编程
  2. 阿里云ECS使用vnc远程连接(Ubuntu + CentOS)
  3. Python数据预处理之清及
  4. day 38
  5. ls - 列出目录清单信息
  6. linux虚拟机网络配置
  7. 如何让自己的Dev C++用上C++11标准
  8. Tensorflow中保存模型时生成的各种文件区别和作用
  9. 【转载】python2x与3x下urlretrieve的使用
  10. oracle彻底删除干净