Chamar a co-rotina dentro do Thread

É possível fazer um método de execução de threads asynchronous para que ele possa executar corrotinas dentro dele? Eu percebo que estou misturando paradigmas – estou tentando integrar uma biblioteca de terceiros que usa corrotinas enquanto meu projeto usa threads. Antes de pensar em atualizar meu projeto para usar coroutines, gostaria de explorar a execução de corrotinas nos meus threads.

Abaixo está o meu exemplo usecase onde eu tenho um segmento, mas eu quero chamar uma co-rotina de dentro do meu segmento. Meu problema é a function MyThread::run() não parece estar executando (impressão). O que estou tentando é possível … e aconselhável?

 from threading import Thread class MyThread(Thread): def __init__(self): Thread.__init__(self) self.start() # def run(self): # while True: # print("MyThread::run() sync") async def run(self): while True: # This line isn't executing/printing print("MyThread::run() sync") # Call coroutine... # volume = await market_place.get_24h_volume() try: t = MyThread() while True: pass except KeyboardInterrupt: pass 

Você precisa criar um loop de evento asynchronous e aguardar a conclusão da co-rotina.

 import asyncio from threading import Thread class MyThread(Thread): def run(self): loop = asyncio.new_event_loop() loop.run_until_complete(self._run()) loop.close() async def _run(self): while True: print("MyThread::run() sync") await asyncio.sleep(1) # OR # volume = await market_place.get_24h_volume() t = MyThread() t.start() try: t.join() except KeyboardInterrupt: pass