Как реализована asyncio.sleep () в Python? - PullRequest
0 голосов
/ 26 августа 2018

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

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

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

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

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

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

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

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

.

import asyncio

asyncio.sleep()

.

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

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

P.S.

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

0 голосов
/ 26 августа 2018

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

...