龙卷风中的多处理

Multiprocessing in tornado

我想有两个同步的非阻塞进程运行,一个是while True循环,每分钟缓存一次数据,第二个是如下代码:

def create_and_start_app():
    app = Application([
        ('/dashboard', Dashboard)
    ],
    debug=RuntimeConfig.DEBUG_MODE)
    http_server = HTTPServer(app)
    http_server.listen(RuntimeConfig.APP_PORT)
    print(f'Listening on http:/{RuntimeConfig.APP_HOST}:{RuntimeConfig.APP_PORT}')
    IOLoop.current().start()

我尝试了 IOLoop.current.spawn_call_back 方法和 concurrent.futures.ThreadPoolExecutor 但似乎我没有理解文档的意义,因为我测试的每种方法都在缓存方法和程序中使用 while True 阻塞执行下一个过程。谢谢你,如果你给我一个适合这种情况的示例代码。

time.sleep是阻塞函数。它挂起整个线程,因此不适合在异步程序中使用。您应该使用它的异步等效项(例如 tornado.gen.sleep or asyncio.sleep 只会暂停协程,而不是整个线程。

示例:

from tornado import gen

async def my_coroutine():
    while True:
        # do somehting ...
        await gen.sleep(5 * 60) # pause while loop for 5 minutes