我是一名新手Python3爱好者,希望了解asyncio.sleep()在库中如何实现。
我能编写协程,但似乎无法想出如何开始编写异步睡眠的代码。
如果您直接分享代码或快速教学如何在我的本地机器上查找代码,那将非常棒。谢谢!
我是一名新手Python3爱好者,希望了解asyncio.sleep()在库中如何实现。
我能编写协程,但似乎无法想出如何开始编写异步睡眠的代码。
如果您直接分享代码或快速教学如何在我的本地机器上查找代码,那将非常棒。谢谢!
如果你使用的是Python实现的代码(而不是C扩展),并且正在使用 ipython
,那么查看源代码的一种简单方法是使用 ??
运算符。例如,在我的3.6版本中:
In [1]: import asyncio
In [2]: asyncio.sleep??
Signature: asyncio.sleep(delay, result=None, *, loop=None)
Source:
@coroutine
def sleep(delay, result=None, *, loop=None):
"""Coroutine that completes after a given time (in seconds)."""
if delay == 0:
yield
return result
if loop is None:
loop = events.get_event_loop()
future = loop.create_future()
h = future._loop.call_later(delay,
futures._set_result_unless_cancelled,
future, result)
try:
return (yield from future)
finally:
h.cancel()
File: c:\program files\python36\lib\asyncio\tasks.py
Type: function
您还可以直接查看CPython GitHub repo,但根据代码组织,可能不容易找到(例如,在这种情况下,代码实际上存在于asyncio.tasks
中,并自动导入到asyncio
中),而ipython
魔术函数则可以直接为您找到它。
asyncio.sleep
的实际生产代码,还是想了解如何自己编写一个?前者涉及到许多库所涵盖的问题(例如取消、对sleep(0)
的特殊处理、提供结果值的选项等),比人们预期的要复杂得多。 - user4815162342