我正在使用Python+Tornado制作一个web应用程序,它基本上为用户提供文件。我没有数据库。
如果文件可用,则直接获取和提供这些文件,如果不可用,则动态生成这些文件。
我希望以异步方式为客户端提供服务,因为有些文件可能已经可用,而其他文件则需要生成(因此它们需要等待,我不希望它们阻止其他用户)。
我有一个类来管理文件的选取或生成,我只需要从Tornado中调用它。
实现这一目标的最佳方法是什么(CPU和RAM效率最高)?我应该用线吗?一个子过程?一个简单的gen.Task like this one?
另外,我希望我的实现能在Google App Engines上运行(我认为它们不允许子进程生成?)。
我对异步web服务比较陌生,所以欢迎任何帮助。
我已经找到了问题的答案:genTask示例确实是实现异步调用的最佳方法,这是因为该示例确实使用了Python coroutine,我一眼就不明白,因为我认为yield只用于返回生成器的值。
具体例子:
这里重要的是两件事的结合:
yield,它实际上生成了一个协程(或伪线程,它非常有效,并且是高度并发友好的)。 http://www.python.org/dev/peps/pep-0342/
gen.Task()
这是一个非阻塞(异步)函数,因为如果在阻塞函数上生成一个协程,它就不会是异步的。gen.Task()
由Tornado提供,专门用于使用Python的协程语法。更多信息: http://www.tornadoweb.org/documentation/gen.html因此,Python中使用协程的异步调用的规范示例如下:
现在Documentation有解了。
简单示例:
相关问题 更多 >
编程相关推荐