Cómo usar la función asíncrona en Qthread en Python Cómo usar la función asíncrona en qthread de Python

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_completepara 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()

Supongo que te gusta

Origin blog.csdn.net/weixin_45518621/article/details/130441125
Recomendado
Clasificación