在Tornado中,我们通常编写以下代码来异步调用函数:
class MainHandler(tornado.web.RequestHandler):
@tornado.gen.coroutine
def post(self):
...
yield self.handleRequest(foo)
...
@tornado.gen.coroutine
def handleRequest(self, foo):
...
Run Code Online (Sandbox Code Playgroud)
但是在asyncio中(将随Python 3.4一起提供,可以从pip for Python 3.3安装),我们yield from用来实现同样的目的:
@asyncio.coroutine
def myPostHandler():
...
yield from handleRequest(foo)
...
@asyncio.coroutine
def handleRequest(foo)
...
Run Code Online (Sandbox Code Playgroud)
从代码看,差异是yield和yield from.然而,前者handleRequest(foo)返回一个tornado.concurrent.Future对象,后者返回一个generator对象.
我的问题是,机制中两件事之间有什么区别?控制流程如何?谁调用实际handleRequest并检索其返回值?
附加:我具有Python生成器和迭代器的基本知识.我想通过使用这些来了解Tornado和asyncio的成就,以及这两种机制之间的区别.
我有一个Git项目.我们来说吧Proj.
Proj有两个子模块,Lib和Utils.
Lib也有子模块Utils.
现在问题是,当一个人想要时git clone --recursive Proj,他将需要下载Utils两次.当项目进展得更深时,情况可能会更糟.
那么如何Proj重新使用Utils已经下载的Lib?
我的工作树:
Proj # Main project
+-- .git
`-- external
+-- Lib # Proj depends on Lib
| +-- .git
| `-- external
| `-- Utils # Lib depends on Utils
| `-- .git
`-- Utils # Proj also depends on Utils
`-- .git
Run Code Online (Sandbox Code Playgroud)
注意:
最好Utils留在external/Utils.
由于Windows兼容性,不允许使用符号链接.
如果有人能帮我解决这么复杂的问题,我将不胜感激.
我经常听说"C++源代码需要大量的时间和内存来编译".
我也听说C++模板是Turing完成的,所以它可能会遇到Halting问题.
我还构建了一个C++项目,花费8 GiB的内存和2小时的时间.
所以,问题是:是否存在编译无限时间的C++代码?
(嵌套包含或嵌套模板是可检测的,因此不应计算.)
相关问题:是否存在可编译无限内存的C++代码?(我将它们分开,因为我期待不同的答案.)
c++ ×1
compilation ×1
generator ×1
git ×1
python ×1
repository ×1
templates ×1
tornado ×1
yield ×1