@@ -1272,7 +1272,7 @@ Python中实现并发编程的三种方案:多线程、多进程和异步I/O
1272
1272
> 2 . 程序的输入可以并行的分成块,并且可以将运算结果合并。
1273
1273
> 3 . 程序在内存使用方面没有任何限制且不强依赖于I/O操作(如:读写文件、套接字等)。
1274
1274
1275
- - 异步处理:从调度程序的任务队列中挑选任务,该调度程序以交叉的形式执行这些任务,我们并不能保证任务将以某种顺序去执行,因为执行顺序取决于队列中的一项任务是否愿意将CPU处理时间让位给另一项任务 。异步任务通常通过多任务协作处理的方式来实现,由于执行时间和顺序的不确定,因此需要通过回调式编程或者` future ` 对象来获取任务执行的结果。Python 3通过 ` asyncio ` 模块和` await ` 和` async ` 关键字(在Python 3.7中正式被列为关键字 )来支持异步处理。
1275
+ - 异步处理:从调度程序的任务队列中挑选任务,该调度程序以交叉的形式执行这些任务,我们并不能保证任务将以某种顺序去执行,因为执行顺序取决于队列中的一项任务是否愿意将 CPU 处理时间让位给另一项任务 。异步任务通常通过多任务协作处理的方式来实现,由于执行时间和顺序的不确定,因此需要通过回调式编程或者` future ` 对象来获取任务执行的结果。Python 3 通过 ` asyncio ` 模块和` await ` 和` async ` 关键字(在 Python 3.7 中正式被列为关键字 )来支持异步处理。
1276
1276
1277
1277
``` Python
1278
1278
"""
@@ -1329,7 +1329,7 @@ Python中实现并发编程的三种方案:多线程、多进程和异步I/O
1329
1329
1330
1330
> ** 说明** :上面的代码使用` get_event_loop ` 函数获得系统默认的事件循环,通过` gather ` 函数可以获得一个` future ` 对象,` future ` 对象的` add_done_callback ` 可以添加执行完成时的回调函数,` loop ` 对象的` run_until_complete ` 方法可以等待通过` future ` 对象获得协程执行结果。
1331
1331
1332
- Python中有一个名为 ` aiohttp ` 的三方库,它提供了异步的HTTP客户端和服务器 ,这个三方库可以跟` asyncio ` 模块一起工作,并提供了对` Future ` 对象的支持。Python 3.6中引入了` async ` 和` await ` 来定义异步执行的函数以及创建异步上下文,在Python 3.7中它们正式成为了关键字 。下面的代码异步的从5个URL中获取页面并通过正则表达式的命名捕获组提取了网站的标题。
1332
+ Python 中有一个名为 ` aiohttp ` 的三方库,它提供了异步的 HTTP 客户端和服务器 ,这个三方库可以跟` asyncio ` 模块一起工作,并提供了对` Future ` 对象的支持。Python 3.6中引入了` async ` 和` await ` 来定义异步执行的函数以及创建异步上下文,在 Python 3.7 中它们正式成为了关键字 。下面的代码异步的从5个URL中获取页面并通过正则表达式的命名捕获组提取了网站的标题。
1333
1333
1334
1334
``` Python
1335
1335
import asyncio
@@ -1369,8 +1369,8 @@ Python中实现并发编程的三种方案:多线程、多进程和异步I/O
1369
1369
1370
1370
> ** 重点** :** 异步I/O与多进程的比较** 。
1371
1371
>
1372
- > 当程序不需要真正的并发性或并行性,而是更多的依赖于异步处理和回调时,` asyncio ` 就是一种很好的选择。如果程序中有大量的等待与休眠时,也应该考虑` asyncio ` ,它很适合编写没有实时数据处理需求的Web应用服务器 。
1372
+ > 当程序不需要真正的并发性或并行性,而是更多的依赖于异步处理和回调时,` asyncio ` 就是一种很好的选择。如果程序中有大量的等待与休眠时,也应该考虑` asyncio ` ,它很适合编写没有实时数据处理需求的 Web 应用服务器 。
1373
1373
1374
- Python还有很多用于处理并行任务的三方库 ,例如:` joblib ` 、` PyMP ` 等。实际开发中,要提升系统的可扩展性和并发性通常有垂直扩展(增加单个节点的处理能力)和水平扩展(将单个节点变成多个节点)两种做法。可以通过消息队列来实现应用程序的解耦合,消息队列相当于是多线程同步队列的扩展版本,不同机器上的应用程序相当于就是线程,而共享的分布式消息队列就是原来程序中的Queue。消息队列(面向消息的中间件)的最流行和最标准化的实现是AMQP (高级消息队列协议),AMQP源于金融行业 ,提供了排队、路由、可靠传输、安全等功能,最著名的实现包括:Apache的ActiveMQ、RabbitMQ等 。
1374
+ Python 还有很多用于处理并行任务的三方库 ,例如:` joblib ` 、` PyMP ` 等。实际开发中,要提升系统的可扩展性和并发性通常有垂直扩展(增加单个节点的处理能力)和水平扩展(将单个节点变成多个节点)两种做法。可以通过消息队列来实现应用程序的解耦合,消息队列相当于是多线程同步队列的扩展版本,不同机器上的应用程序相当于就是线程,而共享的分布式消息队列就是原来程序中的Queue。消息队列(面向消息的中间件)的最流行和最标准化的实现是 AMQP (高级消息队列协议),AMQP 源于金融行业 ,提供了排队、路由、可靠传输、安全等功能,最著名的实现包括:Apache 的 ActiveMQ、RabbitMQ 等 。
1375
1375
1376
- 要实现任务的异步化,可以使用名为` Celery ` 的三方库。` Celery ` 是Python编写的分布式任务队列 ,它使用分布式消息进行工作,可以基于RabbitMQ或Redis来作为后端的消息代理 。
1376
+ 要实现任务的异步化,可以使用名为` Celery ` 的三方库。` Celery ` 是 Python 编写的分布式任务队列 ,它使用分布式消息进行工作,可以基于 RabbitMQ 或 Redis 来作为后端的消息代理 。
0 commit comments