如何在tornad中使API调用异步

2024-05-12 20:54:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经使用下面的语句启动了我的web服务器

tornado.ioloop.IOLoop.current().start()

我用@协同程序以收益回报 为了检查方法调用是否是异步的,我添加了时间。睡觉(五) 但是方法调用都是同步的,它等待5秒,然后执行下一个语句,对tornado服务器的任何其他调用都将等待第一个调用完成。如何使我的API异步

我的方法中没有任何IO调用,而是CPU密集的数学计算。在


Tags: 方法io服务器apiweb时间语句cpu
2条回答

来自tornado docs:

The reason for this is that time.sleep is a blocking function: it doesn’t allow control to return to the IOLoop so that other handlers can be run.

你可以阅读更多关于这个here。在

您应该将time.sleep替换为对协程友好的等价物tornado.gen.sleep。在

正如已经指出的,你可以使用tornado.gen.sleep来让你的协同程序与睡眠一起工作。然而,最终,这对你没有帮助。 异步编程是为这样一种情况而设计的:在有IO要处理的情况下,您希望执行附加处理。当有CPU工作要做时,例程继续运行。因此,即使使用正确的异步原语,在运行计算时也会阻塞。在

原则上,线程编程在这种情况下工作得更好,因为每个线程都可以同时运行,在CPU限制的工作上取得进展。但是,这对Python的帮助不大。由于Python中线程锁定的工作方式,基本上一次只能运行一个Python线程。 您可以查看多处理模块,看看是否可以在单独的进程中运行每个计算。这可能是高效利用Python的多CPU系统的最佳方法。在

相关问题 更多 >