Есть ли способ вызвать await прямо в ячейке Jupyter? - PullRequest
0 голосов
/ 13 июня 2018

Я видел примеры такого кода, работающего в определенных средах (например, https://github.com/ipython/ipykernel/pull/323).

Но для меня это пока только SyntaxError:

enter image description here

Обновление:

Я знаю, что это "чистый" питон, он не будет работать, и aware предполагается использовать в async def 'только s.

Я также знаю, что в jupyter это возможно (см. ссылку выше), поэтому движок способен это сделать. Вопрос в том, как избавиться от этого сообщения об ошибке.

Update2 В чем заключается идея вызова await напрямую:

Я работаю с асинхронной библиотекой. В текущей версии jupyter трудно получить возвращаемое значениесопрограмма:

enter image description here Лучшее, что я нашел, это глобальные переменные:

enter image description here

Одна из проблем здесь заключается в том, что res еще не готов в ячейке 25. Мне нужно подождать, пока я не увижу "готово", затем использовать значение в другой ячейке.

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

Теперь рассмотрите это:

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Понял!

enter image description here

Для этого требуется установить версию для разработки IPython (https://github.com/ipython/ipython/pull/11155).

Какойэто:

pip install git + https://github.com/minrk/ipython.git@more-await-repl#egg=ipython

pip install git + https://github.com/minrk/ipykernel.git@run-async#egg=ipykernel

Обновление:

Как отмечено @К сожалению, в настоящее время эта функциональность присутствует в последней версии ipykernel на pypi.

0 голосов
/ 13 июня 2018

Попробуйте что-нибудь подобное.

import asyncio

async def myfun():
    await asyncio.sleep(1)
    return 5

А теперь используйте myfun () там, где вам нравится.

...