【python3】tornado高性能编程

  • 使用多进程充分利用cpu
  • 使用异步编程 asyncio
python 复制代码
import asyncio
import time
from abc import ABC
from concurrent.futures import ProcessPoolExecutor
from tornado import web, ioloop, gen


async def async_task(name):
    print(f"start: {name}")
    st = int(time.time())
    time.sleep(3)  # 模拟同步等待 
    await asyncio.sleep(3)  # 模拟异步等待
    result = f"task: {name}, start: {st}, end: {int(time.time())}"
    return result


def run_async_task(name):
    return asyncio.run(async_task(name))


class MainHandler(web.RequestHandler, ABC):
    executor = ProcessPoolExecutor()  # 进程池

    @gen.coroutine
    def get(self):
        task_name = self.get_argument("task", "task-1")
        result = yield self.executor.submit(run_async_task, task_name)
        self.write(result)


def make_app():
    return web.Application([
        (r"/", MainHandler),
    ])


if __name__ == '__main__':
    app = make_app()
    app.listen(8888)
    print("http://localhost:8888/?task=task-X")
    ioloop.IOLoop.current().start()
相关推荐
4***57几秒前
数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表
数据库·mysql·oracle
啊吧怪不啊吧1 分钟前
SQL之表的字符串内置函数详解
大数据·数据库·sql
F***74173 分钟前
数据库课设---酒店管理系统(MySQL、VBNet)
android·数据库·mysql
1***t82731 分钟前
MySQL 8.0安装
数据库·mysql·adb
c***693035 分钟前
使用mysql报Communications link failure异常解决
数据库·mysql
t***q3340 分钟前
关于Mysql 中 Row size too large (> 8126) 错误的解决和理解
数据库·mysql
马克学长1 小时前
SSM贫困区教育资源捐赠平台m6y9w(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·教育资源捐赠·贫困区帮扶
@游子3 小时前
SQL注入语法和介绍(一)
数据库·oracle
蒋士峰DBA修行之路6 小时前
实验十三 WDR诊断报告
数据库
杂亿稿6 小时前
数据库的约束
数据库