是否可以使线程运行方法异步,以便它可以在其中执行协同程序?我意识到我正在混合范式 - 我正在尝试集成使用协同程序的第三方库,而我的项目使用线程。在我考虑更新我的项目以使用协同程序之前,我想在我的线程中探索执行协同程序。
下面是我的示例用例,我有一个线程,但我想从我的线程中调用一个协同程序。我的问题是函数MyThread::run()
似乎没有执行(打印)。我正在尝试的是什么......并且可取吗?
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
答案 0 :(得分:1)
您需要创建一个asyncio事件循环,并等待协程完成。
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