python tornado motor 异步操作mongodb
来源:互联网 发布:简谱打谱软件for mac 编辑:程序博客网 时间:2024/05/22 03:51
# -*- coding: utf-8 -*-
import logging
import logging.handlers
import motor.motor_tornado
import tornado.ioloop
import tornado
import tornado.web
import tornado.httpserver
from http_handler import ScooterNotifyHandler
from tornado.options import define, options, parse_command_line
__author__ = 'Ennis'
LISTEN_PORT=7900
define("port", default=LISTEN_PORT, help="http server listen port")
db_con = motor.motor_tornado.MotorClient("mongodb://192.168.1.205:12345")
def init_logging():
"""
日志文件设置,每天切换一个日志文件
:return:
"""
logger = logging.getLogger()
logger.setLevel(log_level)
sh = logging.StreamHandler()
file_log = logging.handlers.RotatingFileHandler('scooter_notify.log', maxBytes=10 * 1024 * 1024, backupCount=50)
formatter = logging.Formatter(
'[%(asctime)s] [%(levelname)-7s] [%(module)s:%(filename)s-%(funcName)s-%(lineno)d] %(message)s')
sh.setFormatter(formatter)
file_log.setFormatter(formatter)
logger.addHandler(sh)
logger.addHandler(file_log)
logging.info("Current log level is : %s", logging.getLevelName(logger.getEffectiveLevel()))
def start_http_serv():
try:
# 装载url配置
app = tornado.web.Application(
handlers=[
(r'/scooter_notify', ScooterNotifyHandler),
],
db=db_con
)
# 配置server
api_server = tornado.httpserver.HTTPServer(app)
api_server.listen(options.port)
logging.info("start scooter notify http server at: %d", options.port)
except Exception as e:
logging.error('Exception: %s', e)
tornado.ioloop.IOLoop.instance().start()
if __name__ == '__main__':
try:
# 隐藏窗口
whnd = ctypes.windll.kernel32.GetConsoleWindow()
if whnd != 0:
ctypes.windll.user32.ShowWindow(whnd, 0)
ctypes.windll.kernel32.CloseHandle(whnd)
# 解析参数
parse_command_line()
init_logging()
start_http_serv()
except Exception as e:
print("start scooter notify fail: %s", e)
以下为具体操作实现,tornado的post接口实现过程,http_handler.py
# coding: utf8
from tornado.web import RequestHandler
import tornado.gen
import tornado.httpclient
import json
import logging
class ScooterNotifyHandler(RequestHandler):
def data_received(self, chunk):
pass
@tornado.gen.coroutine
def post(self):
try:
# 获取request 内容
db = self.settings['db']
req_body = self.request.body.decode()
logging.info('req_body = [%s]', req_body)
data_info = json.loads(req_body)
reader_pos = yield db[DB_SG]['tReader'].find_one({'serial': reader_serial}, {'positioninfo': 1, '_id': 0}) # 查找一个,具体需根据实际数据库操作
control_info = db[DB_SG]['tControlRule'].find({'targets': vehicle_info['vin']}, {'distance': 1}) # 多个查询操作,插入、更新与pymongo相同,需加yield
for one_control in (yield control_info.to_list(1000)):
pass
# do one_control operate
except Exception as e:
msg = "ScooterNotifyHandler post api err=%s" % e
logging.error(msg)
msg_dict = dict()
msg_dict['status'] = 1
msg_dict['text'] = msg
self.write(msg_dict)
self.finish()
- python tornado motor 异步操作mongodb
- tornado中使用motor异步操作mongodb
- python motor异步mongodb操作
- python MongoDB+pymongo+Tornado
- python tornado 操作 mysql
- Tornado异步
- tornado 异步
- Tornado异步
- tornado异步
- motor
- 【Tornado +Tenjin+MongoDB】- 初窥Tornado
- tornado中使用celery实现异步MySQL操作
- tornado中使用celery实现异步MySQL操作
- 执行了不等待结果? 异步操作MySQL:Tornado-MySQL
- Python Web框架Tornado的异步处理代码示例
- Python Tornado 异步和非阻塞I/O
- 对比Tornado和Twisted两种异步Python框架
- python tornado
- Delphi 用INI实现多语言界面的切换
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命
- Kali Linux USB Live Persistence模式
- Zookeeper系列(十四)Zookeeper开源客户端之Curator的Master/Leader选举
- c++ A+B
- python tornado motor 异步操作mongodb
- jquery 商品评论 星星点击 事件
- 基于Dragonboard 410c 的智能仪表预研
- 工作遇到的小bug--------设置match_partent无效
- 慎用console.log(),这个方法打印出来的东西,有时候是错误的。 so amazing。。。你真的了解console.log()吗,它不是同步的,即不是实时的,不是实时的,不是实时的
- VS2008+QT添加UI后无法编译
- 测试用例需要注意以下几点(转载)
- A+B Problem c++
- 基石---web开发技术发展史