Debes sentirte extraño por mi necesidad de esto, porque estoy tratando de integrar una función proporcionada por una biblioteca cuyas funciones se definen con la palabra clave 'async' con una interfaz GUI que funciona con pyqt.
por ejemplo, quiero usar esta función asíncrona en pyqt que está vinculada a una función de botón.
async def doSomethingSlow():
# do something slow such as HTTP request
# ...
return result
así que solo lo uso asyncio.run(doSomethingSlow())
en la función de ranura.
pero no funciona.
La solución está a continuación.
1.Cree un Qthread para ejecutar esta función y evitar congelar la GUI.
2.encapsular esta función asíncrona en una nueva función asíncrona que asigna el retorno a una variable no local.
3.Utilícelo loop = asyncio.new_event_loop()
para crear un nuevo bucle y utilícelo asyncio.set_event_loop(loop)
para configurarlo.
3.úselo loop.run_until_complete
para ejecutar esta nueva función asíncrona
def test(Qthread):
finishSig = pyqtSignal()
def __init__(self):
super().__init__()
self.res = ''
def run(self):
result = ''
async def encapsulate():
nonlocal result
result = await doSomethingSlow()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(encapsulate())
self.res = result
self.finishSig.emit()