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