引自here:
types.CoroutineType
协同对象的类型,由异步def函数创建。
引自here:
使用async def语法定义的函数始终是协程函数,即使它们不包含await或async关键字。
Python控制台会话:
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32
bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import types
>>> def f(): pass
...
>>> async def g(): pass
...
>>> isinstance(f, types.FunctionType)
True
>>> isinstance(g, types.FunctionType)
True
>>> isinstance(g, types.CoroutineType)
False
>>>
为什么不isinstance(g, types.CoroutineType)
评估为True
?
答案 0 :(得分:4)
协同程序和协同程序功能之间存在差异。与发电机和发电机功能之间存在差异的方式相同:
调用函数g
会返回一个协程,例如:
>>> isinstance(g(), types.CoroutineType)
True
如果您需要判断g
是否是协程函数(即返回协程),您可以查看:
>>> from asyncio import iscoroutinefunction
>>> iscoroutinefunction(g)
True
答案 1 :(得分:1)
isinstance(g, types.CoroutineType)
本身不是有效的Coroutine函数:
g()
这类似于发电机和发电机功能之间的差异。相反,请使用isinstance(g(), types.CoroutineType)
进行比较:
iscoroutinefunction(g)
你也可以试试from asyncio import iscoroutinefunction
iscoroutinefunction(g) #Return true
,更短更整洁:
{{1}}
在此处阅读更多内容:https://docs.python.org/3/library/asyncio-task.html