ipywidget 按钮 on_click 利用 fabric-sdk-py 的异步功能。让它工作的例子?

ipywidget button with on_click utilizing async functions of fabric-sdk-py. Example to make it work?

目前我正在使用 Jupyter 和 fabric-sdk-py 实现 Hyperledger Fabric 的接口。我想提交交易 and/or 使用按钮 ipywidget 评估交易(简单示例是):

def _check_id(b):
    x = await contract.evaluate_transaction('queryUnprotectedEntry', [_id_info.value], user)
_check_id_button.on_click(_check_id)

当然这是行不通的,因为 await 是在异步函数之外调用的。如果我使用 async def _check_id(b) 我会遇到问题,因为 _check_id' was never awaited.

如果我使用 asyncio.runasyncio.get_event_loop().run_until_complete,它与 This event loop is already running

的效果不一样

按钮使用on_click执行异步函数的方式是什么?

目前不确定这是否是最佳解决方案,但它确实有效。为了让一切都在我使用的模块的开头工作:

import nest_asyncio
nest_asyncio.apply()

之后我可以使用以下内容:

def _check_id(b):
    loop = asyncio.get_event_loop()
    result = loop.run_until_complete(contract.evaluate_transaction('queryUnprotectedEntry', [_id_info.value], user)
_check_id_button.on_click(_check_id)