有人成功地将Cython与Asyncio协程配合使用吗? 我有一个在Python中运行良好的非常简单的示例,在Cython中却无法运行:它是以下单个文件,我使用Cython编译并执行。执行开始正确,但无法运行协程。 似乎Cython修改了“sometask”协程的类型,然后Asyncio和Inspect不像通常那样对待它。
#!/usr/bin/env python
import asyncio
@asyncio.coroutine
def sometask():
counter = 0
while True:
print(counter)
yield from asyncio.sleep(1)
counter += 1
def runloop():
loop = asyncio.get_event_loop()
asyncio.async(sometask())
try:
print('Start loop')
loop.run_forever()
except KeyboardInterrupt:
print('Aborted by user')
loop.close()
更新: 目前我通过在asyncio/tasks.py文件中以不雅的方式修改,使其能够“工作”,其中检查对象是否为生成器的地方被修改,而事实上Cython将其作为内置函数。即使它具有与预期不同的类型,这个Cython对象仍然会完成asyncio协程的工作。