python中的asyncio.sleep()是如何实现的?

lay*_*cat 4 python asynchronous python-3.x python-asyncio

我是一个新手python3爱好者,他希望了解如何通过库实现asyncio.sleep().

我能够编写协同程序,但我似乎无法考虑如何开始编写异步睡眠代码.

如果您直接共享代码或提供有关如何在本地计算机上查找代码的快速教程,那将会很棒.谢谢!

Sha*_*ger 6

对于用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
Run Code Online (Sandbox Code Playgroud)

你也可以看一下CPython GitHub repo,但是根据代码组织的不同,它可能不明显在哪里(例如在这种情况下代码实际存在asyncio.tasks,并自动导入asyncio),而ipython魔术为你找到它直.