Как реализована asyncio.sleep () в Python?

1

Я новичок-энтузиаст python3, который надеется узнать, как библиотека asyncio.sleep() реализована.

Я способен писать сопрограммы, но я не могу представить, как начать писать код для асинхронного сна.

было бы здорово, если бы вы делили код напрямую или давали бы быстрый учебник о том, как найти код на моей локальной машине. благодарю вас!

  • 0
    Ваша цель - найти действительный производственный код asyncio.sleep , или вы хотите понять, как написать его самостоятельно? Первый из них более сложный, чем можно было бы ожидать из-за множества проблем, охватываемых библиотекой (например, отмена, специальный sleep(0) , возможность предоставления значения результата и т. Д.)
  • 0
    привет, просто быстрое обновление. Я написал следующий код из руководства, приведшего к этой теме :) github.com/missingyu/asyncwinrm
Теги:
python-3.x
asynchronous
python-asyncio

2 ответа

3
Лучший ответ

Для кода, реализованного в 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 магия находит это для вас непосредственно.

  • 0
    Мне не приходило в голову использовать функцию call_later, с которой я экспериментировал ранее. очень признателен, спасибо!
1

Я не могу сказать, есть ли лучший способ, но вот как я это делаю.

  1. Установить Pycharm (версия сообщества бесплатна)

  2. Создайте проект и настройте интерпретатор Python

  3. Напишите простой код, который использует интересующую вас функцию:

,

import asyncio

asyncio.sleep()

,

  1. Ctrl+click на sleep в коде

  2. Pycharm откроет файл с реализацией функции sleep.

PS

Я думаю, что иная современная среда IDE также имеет аналогичные способы быстрого поиска реализации.

  • 0
    Теперь я знаю, что это старая ветка, но в режиме IDLE вы можете нажать Alt + M, затем ввести имя модуля и нажать Enter.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню