龙卷风中的多处理
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
我想有两个同步的非阻塞进程运行,一个是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