策略 事件循环策略是一个全局的每个进程对象,用于控制事件循环的管理。每个事件循环都有一个defaultpolicy,可以使用策略API进行更改和自定义. 策略定义了context的概念,并管理每个上下文的单独事件循环。默认策略定义context为当前线程. 使用自定义事件循环策略,get_event_loop(), set_event_loop()和new_event_loop()函数的行为可以自定义. 策略对象应该实现AbstractEventLoopPolicy抽象基类中定义的API. 获取和设置策略 以下函数可用于获取并设置当前进程的策略: asyncio.get_event_loop_

期货 Future对象用于桥接基于低级回调的代码与高级异步/等待代码. 未来函数 asyncio.isfuture(obj) 返回True如果obj是: 的一个实例asyncio.Future, 的一个实例asyncio.Task, 一个带有_asyncio_future_blocking属性。 版本3.5中的新功能 asyncio.ensure_future(obj, *, loop=None) 返回: obj论证,如果obj是Future,一个 Task,或类似Future的对象(isfuture()用于测试。) Task对象包装obj,如果obj是acoroutine(iscorouti

事件循环 前言 事件循环是每个asyncio应用程序的核心。事件循环运行异步任务和回调,执行networkIO操作,并运行子进程. 应用程序开发人员通常应该使用高级asyncio函数,例如asyncio.run(),并且很少需要引用loopobject或调用其方法。本节主要面向低级代码,库和框架的作者,他们需要更好地控制事件循环行为. 获取事件循环 以下低级函数可用于获取,设置或创建事件循环: asyncio.get_running_loop() 返回当前操作系统线程中的运行事件循环 如果没有运行事件循环,则会引发RuntimeError。此函数只能从协程或回调调用. 新版本3.7. asyn

子进程 本节介绍高级异步/等待asyncio API创建和管理子进程. 这是一个asyncio如何运行shell命令并获得结果的示例: import asyncioasync def run(cmd): proc = await asyncio.create_subprocess_shell( cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) stdout, stderr = await proc.communicate() print(f”[{cmd!r} exited with {proc.return

同步原语 asyncio同步原语设计与threading模块类似,有两个重要注意事项: asyncio原语不是线程安全的,因此它们不应该用于OS线程同步(使用threading forthat); 这些同步原语的方法不接受timeout参数;使用asyncio.wait_for()函数进行超时操作. asyncio具有以下基本同步原语: Lock Event Condition Semaphore BoundedSemaphore 锁定 class asyncio.Lock(*, loop=None) 为asyncio任务实现互斥锁。不是thread-safe. 可以使用asyncio loc

协同程序和任务 本节概述了与协同程序和任务一起使用的高级asyncio API . Coroutines Awaitables 运行asyncio程序 创建任务 睡觉 同时运行任务 屏蔽取消 超时 等待原语 从其他线程调度 内省 任务对象 基于生成器的协同程序 协同程序 使用async / await语法声明的协同程序是编写asyncio应用程序的首选方法。例如,下面的代码片段(需要Python 3.7+)打印“hello”,等待1秒,然后打印“world”: >>> import asyncio>>> async def main():… print(

queue– 同步队列类 源代码: Lib / queue.py queue模块实现了多生产者,多用户队列。当在多个线程之间必须安全地交换信息时,它在线程编程中特别有用。Queuethismodule中的类实现了所有必需的锁定语义。这取决于Python中线程支持的可用性;看threading模块 该模块实现了三种类型的队列,它们的不同之处仅在于检索条目的顺序。在FIFO 队列中,添加的第一个任务是第一个检索到的任务。在aLIFO 队列,最近添加的条目是第一个检索的(像堆栈一样操作)。使用优先级队列,条目保持排序(使用heapq模块)和最低价值的条目首先被检索. 在内部,这三种类型的

subprocess– 子进程管理 源代码: Lib / subprocess.py subprocess模块允许你生成新进程,连接到他们的输入/输出/错误管道,并获取其返回代码。该模块旨在替换几个较旧的模块和功能: os.systemos.spawn* 有关如何使用subprocess模块替换这些模块和功能的信息可以在以下部分找到. 参见还 PEP 324 – PEP提出子进程模块 使用subprocess模块 调用子进程的推荐方法是将run()函数用于它可以处理的所有用例。对于更高级的用例,可以直接使用Popen接口. run()函数在Python 3.5中添加;如

concurrent.futures– 启动并行任务 版本3.2. 新增源代码: Lib / concurrent / futures / thread.py和Lib / concurrent / futures / process.py concurrent.futures模块提供了一个同步执行callables的高级接口. 可以使用ThreadPoolExecutor使用线程执行异步执行,也可以使用ProcessPoolExecutor。两者都实现了相同的接口,由抽象Executor类。 执行者对象 class concurrent.futures.Executor 一个抽象类

multiprocessing– 基于流程的并行性 源代码:LIB /多 介绍 multiprocessing是一个使用类似于的API支持生成进程的包threading模块。multiprocessingpackage提供本地和远程并发,通过使用子进程而不是线程有效地侧面执行全局解释器锁。Dueto,multiprocessing模块允许程序员在给定的机器上充分利用多个处理器。它可以在Unix和Windows上运行. multiprocessing模块还介绍了中没有注册的APIthreading模块。一个很好的例子就是Pool这个对象提供了一种方便的方法,可以跨多个输入值并行执行函