def main(): tornado.options.parse_command_line() # settings if options.settings: tornado.options.parse_config_file(options.settings) else: tornado.options.parse_config_file(os.path.join(APPSDIR, 'settings', '__init__.py')) # i18n translations # tornado.locale.load_translations(settings.TRANSLATIONDIR) # tornado.locale.get_supported_locales() # tornado.locale.set_supported_locales("en_US") # httpserver httpserver = tornado.httpserver.HTTPServer(Application(), xheaders=True) httpserver.bind(options.port, "127.0.0.1") httpserver.start(options.processor or int(1)) # WARNING: this timestamp must equal to supervisord.readear.conf stopwaitsecs = 10 # WARNING: if not or less, the server will be killed by supervisord before max_wait_seconds_before_shutdown if options.debug: MAX_WAIT_SECONDS_BEFORE_SHUTDOWN = 0 else: MAX_WAIT_SECONDS_BEFORE_SHUTDOWN = 10 # signal handler def sig_handler(sig, frame): logging.warning("Catching Signal: %s", sig) tornado.ioloop.IOLoop.instance().add_callback(shutdown) # signal handler's callback def shutdown(): logging.info("Stopping HttpServer...") httpserver.stop() # No longer accept new http traffic logging.info("IOLoop Will be Terminate in %s Seconds...", MAX_WAIT_SECONDS_BEFORE_SHUTDOWN) instance = tornado.ioloop.IOLoop.instance() deadline = time.time() + MAX_WAIT_SECONDS_BEFORE_SHUTDOWN # recursion for terminate IOLoop.instance() def terminate(): now = time.time() if now < deadline and (instance._callbacks or instance._timeouts): instance.add_timeout(now + 1, terminate) else: instance.stop() # After process all _callbacks and _timeouts, break IOLoop.instance() logging.info('Shutdown...') # process recursion terminate() # signal register signal.signal(signal.SIGINT, sig_handler) signal.signal(signal.SIGTERM, sig_handler) # start ioloop for socket, infinite before catch signal tornado.ioloop.IOLoop.instance().start() logging.info("Exit...")
def run_forever(application, port=None, num_processes=1): """run server port='8888' port='8801, 8802, 8803' """ logger = logging.getLogger('appserver') if sys.platform == 'win32': title = 'Tornado' from .win32 import set_windows_console_title, set_windows_console_size set_windows_console_title(title) set_windows_console_size(120, 24) ports = [] if port: if isinstance(port, str): ports.extends(re.split('[,;\s]+', port)) elif isinstance(port, Mapping): for p in port: ports.append(p) elif isinstance(port, int): ports.append(port) if not ports: ports.append(8888) application.setup() if num_processes <= 0: import multiprocessing num_processes = multiprocessing.cpu_count() if application.settings.get('debug', False) and num_processes != 1: num_processes = 1 logger.warn('In debug mode, it should be in single process mode') httpserver = tornado.httpserver.HTTPServer(application) for port in ports: httpserver.bind(port) httpserver.start(num_processes) ioloop = tornado.ioloop.IOLoop.instance() def sigint_int(s, f): logger.info('server is shutting') ioloop.add_callback(ioloop.stop) signal.signal(signal.SIGINT, sigint_int) print('Server Started. Press <CRTL-C> to kill server') ioloop.start() # 启动服务器 logger.info('server stopped')
def run_forever(application, port=None, num_processes=1) : """run server port='8888' port='8801, 8802, 8803' """ logger = logging.getLogger('appserver') if sys.platform == 'win32' : title = 'Tornado' from .win32 import set_windows_console_title, set_windows_console_size set_windows_console_title(title) set_windows_console_size(120, 24) ports = [] if port: if isinstance(port, str): ports.extends(re.split('[,;\s]+', port)) elif isinstance(port, Mapping): for p in port: ports.append(p) elif isinstance(port, int): ports.append(port) if not ports: ports.append(8888) application.setup() if num_processes <= 0: import multiprocessing num_processes = multiprocessing.cpu_count() if application.settings.get('debug', False) and num_processes != 1: num_processes = 1 logger.warn('In debug mode, it should be in single process mode') httpserver = tornado.httpserver.HTTPServer(application) for port in ports: httpserver.bind(port) httpserver.start(num_processes) ioloop = tornado.ioloop.IOLoop.instance() def sigint_int(s, f): logger.info('server is shutting') ioloop.add_callback(ioloop.stop) signal.signal(signal.SIGINT, sigint_int) print('Server Started. Press <CRTL-C> to kill server') ioloop.start() # 启动服务器 logger.info('server stopped')
import tornado.httpserver import tornado.ioloop import config from application import Application if __name__ == '__main__': app = Application() httpserver = tornado.httpserver.HTTPServer(app) httpserver.bind(config.options["port"]) httpserver.start(1) tornado.ioloop.IOLoop.current().start()
import tornado import tornado.web import tornado.ioloop import tornado.httpserver import tornado.options from application import Application from db import sqlite_tornado if __name__ == '__main__': app = Application() httpserver = tornado.httpserver.HTTPServer(app) httpserver.bind(8080) sqlite_tornado.db_init() httpserver.start() tornado.ioloop.IOLoop.instance().start()
</form>\ </body>\ </html>') #write里面内容是一个简单的完整页面,为了博客方便,放在了一起,建议分开 def post(self, *args, **kwargs): #查看上传文件的完整格式,files以字典形式返回 #print(self.request.files) #{'file1': #[{'filename': '新建文本文档.txt', 'body': b'61 60 -83\r\n-445 64 -259', 'content_type': 'text/plain'}], #'file2': filesDict = self.request.files for inputname in filesDict: #第一层循环取出最外层信息,即input标签传回的name值 #用过filename键值对对应,取出对应的上传文件的真实属性 http_file = filesDict[inputname] for fileObj in http_file: #第二层循环取出完整的对象 #取得当前路径下的upfiles文件夹+上fileObj.filename属性(即真实文件名) filePath = os.path.join(os.path.dirname(__file__), fileObj.filename) with open(filePath, 'wb') as f: f.write(fileObj.body) self.write('上传成功') if __name__ == '__main__': app = tornado.web.Application([(r'/fileup', UpFileHandler)]) httpserver = tornado.httpserver.HTTPServer(app) httpserver.bind(9000) httpserver.start() tornado.ioloop.IOLoop.instance().start()
import tornado.ioloop import tornado.httpserver import config from application import Application if __name__ == '__main__': app = Application() print(__file__) httpserver = tornado.httpserver.HTTPServer(app) httpserver.bind(config.options.get("port")) #httpserver.bind(8888) httpserver.start() # 默认是创建和cpu的核心数个数一致的子进程 #IOLoop IO循环的类:内部继承了epoll实现高并发 tornado.ioloop.IOLoop.current().start()
import tornado.web import tornado.ioloop import tornado.httpserver class IndexHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): self.write("hello customer server.") if __name__ == '__main__': app = tornado.web.Application([ (r"/", IndexHandler) ]) httpserver =tornado.httpserver.HTTPServer(app) # httpserver.listen(8000) httpserver.bind(8000) httpserver.start(1) tornado.ioloop.IOLoop.current().start()
from tornado import web from tornado import httpserver import tornado.ioloop from tornado import options import config # 类似与Django中的类试图一样 通过方法进行匹配 class IndexHandler(web.RequestHandler): def get(self,*args,**kwargs): self.write('this is for test!') # 路由 app = web.Application([ (r'/',IndexHandler) ]) if __name__ == "__main__": httpserver = httpserver.HTTPServer(app) # 使用变量的值 print(config.options['list']) httpserver.bind(config.options['port']) httpserver.start(1) tornado.ioloop.IOLoop.current().start()
import tornado.web import tornado.ioloop import tornado.httpserver import config class indexHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): self.write("hi,tornado") if __name__ == '__main__': print(config.options['list']) app = tornado.web.Application([(r"/", indexHandler)]) httpserver = tornado.httpserver.HTTPServer(app) httpserver.bind(port=config.options['port'], address=config.options['address']) httpserver.start(1) tornado.ioloop.IOLoop.current().start()
from tornado import httpserver import tornado.ioloop from tornado import options options.define('port',default=8000,type=int) options.define('list',default=[],type=str,multiple=True) # 类似与Django中的类试图一样 通过方法进行匹配 class IndexHandler(web.RequestHandler): def get(self,*args,**kwargs): self.write('this is for test!') # 路由 app = web.Application([ (r'/',IndexHandler) ]) if __name__ == "__main__": # 在终端上获取参数的方法:将命令行中的参数进行转换保存到 # tornado.options.options options.parse_command_line() httpserver = httpserver.HTTPServer(app) # 使用变量的值 print(options.options.list) httpserver.bind(options.options.port) httpserver.start(1) tornado.ioloop.IOLoop.current().start()
def main(): tornado.options.parse_command_line() httpserver = tornado.httpserver.HTTPServer(Application()) httpserver.bind(options.port) httpserver.start(1) tornado.ioloop.IOLoop.current().start()
import tornado.web import tornado.ioloop import tornado.httpserver import tornado.options # define parameter,like --port=9000 list=a,b,c,de, tornado.options.define("port", default=8000, type=None) tornado.options.define("list", default=[], type=str) class IndexHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): self.write("hello customer server.") if __name__ == '__main__': # convert command arguments and save into tornado.options object tornado.options.parse_command_line() print(tornado.options.options.list) app = tornado.web.Application([(r"/", IndexHandler)]) httpserver = tornado.httpserver.HTTPServer(app) # use parameter value httpserver.bind(tornado.options.options.port) httpserver.start(1) tornado.ioloop.IOLoop.current().start()
import tornado.web import tornado.ioloop import tornado.options import tornado.httpserver tornado.options.options.define(name="port", default=8090, type=int) tornado.options.options.define(name="address", default="0.0.0.0", type=str) tornado.options.options.define(name="list", default=[], type=list) class indexHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): self.write("hi,tornado") if __name__ == '__main__': tornado.options.parse_config_file("config") tornado.options.options.logging = None print(tornado.options.options.list) app = tornado.web.Application([(r"/", indexHandler)]) httpserver = tornado.httpserver.HTTPServer(app) httpserver.bind(port=tornado.options.options.port, address=tornado.options.options.address) httpserver.start(1) tornado.ioloop.IOLoop.current().start()
# 类似与Django中的类试图一样 通过方法进行匹配 class IndexHandler(web.RequestHandler): def get(self, *args, **kwargs): self.write('this is for test!') # 路由 app = web.Application([(r'/', IndexHandler)]) if __name__ == "__main__": # 实例化一个http链接的服务器 httpserver = httpserver.HTTPServer(app) # 监听端口 httpserver.bind(8888) # 启动io复用\ # 启动多个子进程 httpserver.start(4) # start 参数的取值范围: tornado.ioloop.IOLoop.current().start() """ ~tornado.tcpserver.TCPServer.bind`/`~tornado.tcpserver.TCPServer.start`: simple multi-process:: server = HTTPServer(app) server.bind(8888) server.start(0) # Forks multiple sub-processes IOLoop.current().start()
# filePath=os.path.join(os.path.dirname(__file__),fileObj.filename) # with open(filePath,'wb') as f: # f.write(fileObj.body) file_uuid = uuid.uuid4() ext = filesDict['image'][0]['filename'].split('.')[-1] acceptable_ext = ['jpg', 'jpeg', 'png'] if ext not in acceptable_ext: self.write('格式不正确') return file_name = str(file_uuid) + '.' + ext file_path = os.path.join(SERVER_TMP, file_name) with open(file_path, 'wb') as f: f.write(filesDict['image'][0]['body']) marked_path = await detect_image(file_path) self.write(marked_path) def option(self): self.set_header('Access-Control-Allow-Origin', '*') self.set_header('Access-Control-Allow-Headers', 'x-requested-with') self.set_header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE') if __name__ == '__main__': app = tornado.web.Application([(r'/detect', ScratchDetectorHandler)]) httpserver = tornado.httpserver.HTTPServer(app) httpserver.bind(4000) httpserver.start() tornado.ioloop.IOLoop.instance().start()