concurrent.futures and asyncio.futures
asyncio.Future(*, loop=None)
几乎兼容concurrent.futures.Future
- result()并且exception()不要接受超时参数,并且在未来还没有完成时引发异常。
- add_done_callback()始终通过事件循环的调用注册到的回调call_soon_threadsafe()。
- 此类与包中的wait()和as_completed()函数不兼容concurrent.futures
此类不是线程安全的
基本上,如果您使用ThreadPoolExecutor
或ProcessPoolExecutor
,或者想Future
直接将Direct用于基于线程或基于进程的并发,
请使用concurrent.futures.Future
。如果您正在使用asyncio
,请使用asyncio.Future
asyncio.Future根本不是线程安全的-仅设计用于asyncio基于单线程的应用程序。
如果您想asyncio.Future从事件循环线程之外的线程上调用方法,则需要使用loop.call_soon_threadsafe
''' # asyncio orm + 同步mysql(使用concurrent 来结合两者) ''' import time import asyncio def func(): '''同步耗时操作''' time.sleep(2) return 'ok' async def main(): loop = asyncio.get_running_loop() fut = loop.run_in_executor(None, func) # 1、运行默认的executor (thread) ,调用submit方法申请一个县城区执行一个func函数,并返回一个concurrent.futures.Future对象 # 2、调用asyncio.warp_future对上面对象进行封装 result = await fut print(result) asyncio.run(main())