Я новичок-энтузиаст 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, но в зависимости от организации кода может быть asyncio.tasks
, где искать (например, в этом случае код действительно существует в asyncio.tasks
и автоматически импортируется в asyncio
), тогда как ipython
магия находит это для вас непосредственно.
Я не могу сказать, есть ли лучший способ, но вот как я это делаю.
Установить Pycharm (версия сообщества бесплатна)
Создайте проект и настройте интерпретатор Python
Напишите простой код, который использует интересующую вас функцию:
,
import asyncio
asyncio.sleep()
,
Ctrl+click
на sleep
в коде
Pycharm откроет файл с реализацией функции sleep
.
PS
Я думаю, что иная современная среда IDE также имеет аналогичные способы быстрого поиска реализации.
asyncio.sleep
, или вы хотите понять, как написать его самостоятельно? Первый из них более сложный, чем можно было бы ожидать из-за множества проблем, охватываемых библиотекой (например, отмена, специальныйsleep(0)
, возможность предоставления значения результата и т. Д.)