本文主要是介绍asyncio多线程操作:run_coroutine_threadsafe(coro, loop),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目的:实现asyncio异步的多线程
函数:run_coroutine_threadsafe(coro, loop):
将协程提交给给定的事件循环。线程安全。
返回 concurrent.futures.Future 以等待来自另一个 OS 线程的结果。
此函数意在从与运行事件循环的操作系统线程不同的操作系统线程中调用。例子:
import asyncio, time, threadingasync def main(i): while True:await asyncio.sleep(1)print(i)async def production_task():for i in "123":# 将不同参数main这个协程循环注册到运行在线程中的循环,# thread_loop会获得一循环任务asyncio.run_coroutine_threadsafe(main(i),thread_loop)# 注意:run_coroutine_threadsafe 这个方法只能用在运行在线程中的循环事件使用def start_loop(thread_loop):# 运行事件循环, loop以参数的形式传递进来运行asyncio.set_event_loop(thread_loop)thread_loop.run_forever()if __name__ == '__main__':# 获取一个事件循环thread_loop = asyncio.new_event_loop()# 将次事件循环运行在一个线程中,防止阻塞当前主线程,运行线程,同时协程事件循环也会运行threading.Thread(target=start_loop,args=(thread_loop,)).start()# 将生产任务的协程注册到这个循环中advocate_loop = asyncio.get_event_loop()# 运行次循环advocate_loop.run_until_complete(production_task())
asyncio就是遍历event_loop获取消息,是一个单线程阻塞函数。
在遍历循环过程中如果遇到某个协程阻塞就会卡住,一直等待结果返回,这时候就需要用到多线程防止阻塞。run_coroutine_threadsafe函数在新线程中建立新event_loop,可以动态添加协程,
这篇关于asyncio多线程操作:run_coroutine_threadsafe(coro, loop)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!