为什么我的 tornado 应用程序不工作?(tornado-blog with aiomysql)

Why doesn't my tornado application work?(tornado-blog with aiomysql)

import tornado.ioloop
import tornado.web
import tornado.options
import tornado.locks
import os.path

from tornado.options import define, options
from aiomysql import create_pool

define("port", default=8080, help="run on the given port", type=int)
define("db_host", default="localhost", help="blog database host")
define("db_port", default=3306, help="blog database port")
define("db_database", default="{db_name}", help="blog database name")
define("db_user", default="{db_user}", help="blog database user")
define("db_password", default="{password}", help="blog database password")

async def maybe_create_tables(db):
    async with db.acquire() as conn:
        async with conn.cursor() as cur:
            try:
                await cur.execute("SELECT COUNT(*) FROM user LIMIT 1")
                await cur.fetchone()
            except Exception as e:
                with open("schema.sql") as f:
                    schema = f.read()
                    await cur.execute(schema)

class Application(tornado.web.Application):
    def __init__(self, db):
        self.db = db
        handlers = [
            (r"/", HomeHandler),
            (r".*", BaseHandler)
        ]
        settings = dict(
            debug=True
        )
        super(Application, self).__init__(handlers, **settings)

class BaseHandler(tornado.web.RequestHandler):
   def set_default_headers(self):
        self.set_header("Server", "tornado")

class HomeHandler(BaseHandler):
    async def get(self):
        self.write("hello")

async def main():
    tornado.options.parse_command_line()

    async with create_pool(
        host=options.db_host,
        port=options.db_port,
        user=options.db_user,
        password=options.db_password,
        db=options.db_database,
    ) as db:
        await maybe_create_tables(db)
        app = Application()
        app.listen(options.port)

    shutdown_event = tornado.locks.Event()
    await shutdown_event.wait()

if __name__ == "__main__":
    tornado.ioloop.IOLoop.current().run_sync(main)

我从这里复制了这些代码(https://github.com/xzhdream/tornado-blog-aiomysql/blob/master/blog.py),但它不起作用。 当我 运行 这个应用程序时,没有输出错误,但控制台被冻结了。 Mysql 和 Mysql 用户设置必须正确完成。我检查了很多次。

  1. 您的 Application.__init__ 接受了一个 db 参数,但您在调用 Application 时没有传递一个参数。我不知道为什么您没有收到有关此问题的任何错误回溯。

  2. await shutdown_event.wait()调用在async with create_pool之外,所以数据库连接池会在初始化完成后立即关闭,在服务器启动时不可用运行。缩进这些行,以便它们包含在 async with 块中。