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.run
或 asyncio.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)
目前我正在使用 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.run
或 asyncio.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)