Jupyter Notebook Asyn c функции - PullRequest
0 голосов
/ 06 января 2020

В приведенном ниже коде мне хотелось бы следующее поведение:

Когда пользователь нажимает кнопку, которую я определил в режиме приложения, я хочу, чтобы внутри нее вызывалась подпрограмма print_asyn c , который ждет в течение 2 секунд, а затем печатает "" это asyn c print from buttonCLicked ", затем я хочу, чтобы после печати отображалась кнопка" clicked! ". Вместо этого я получаю ошибку интерпретатора:

Любая помощь приветствуется.

Файл "имя_ячейки", строка 6 SyntaxError: 'ожидание' вне asyn c функция

from IPython.display import display
from ipywidgets import widgets
import asyncio
#DO NOT CHANGE THIS CELL
#Define an async function
async def print_async(message):
    await asyncio.sleep(2)
    print(message)
# Show that we can print from the top-level jupyter terminal
await print_async("This is a top-level async print")
#Define a callback function for the button
def onButtonClicked(_):
    await print_async("this is async print from buttonCLicked")
    print("button clicked!")

button = widgets.Button(
    description='Click me',
    disabled=False,
    button_style='', # 'success', 'info', 'warning', 'danger' or ''
    tooltip='Click me',
    icon=''
)

button.on_click(onButtonClicked)
display(button)
​
button = widgets.Button(
    description='Click me',
    disabled=False,
    button_style='', # 'success', 'info', 'warning', 'danger' or ''
    tooltip='Click me',
    icon=''
)
​
button.on_click(onButtonClicked)
display(button)
Goal: Get the button click to call the print_async method

1 Ответ

0 голосов
/ 07 января 2020

Вы можете сделать это с помощью функции asyncio.run (требуется Python 3.7 или более поздней версии):

В вашем коде это будет выглядеть так:

def onButtonClicked(_):
    asyncio.run(print_async("this is async print from buttonCLicked"))
    print("button clicked!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...