Python并发编程:多进程、Futures与AsyncIO详解
1. 多进程的问题
在Python中进行并发编程时,多进程虽然是一种有效的方式,但也存在一些问题。
1.1 数据共享成本高
多进程之间共享数据的成本非常高。进程间的所有通信,无论是通过队列、管道还是更隐式的机制,都需要对对象进行序列化(pickling)。过度的序列化会迅速占据处理时间。多进程在进程间传递相对较小的对象,并且每个对象需要进行大量工作时效果最佳。如果进程间不需要通信,那么使用多进程模块可能就没有意义,我们可以启动四个独立的Python进程并独立使用它们。
1.2 变量访问混淆
和线程一样,在多进程中很难确定一个变量或方法是在哪个进程中被访问的。如果从另一个进程访问一个变量,通常会覆盖当前运行进程中的变量,而另一个进程则保留旧值。这在维护代码时非常容易造成混淆,因此应避免这样做。
2. Futures
Futures是一种更异步的并发编程方式,它可以根据我们需要的并发类型(倾向于I/O还是CPU)来包装多进程或线程。虽然它不能完全解决意外更改共享状态的问题,但可以让我们的代码结构更清晰,便于追踪问题。Futures在不同的线程或进程之间提供了明确的边界,类似于多进程池,适用于“调用 - 响应”类型的交互。
2.1 示例:文件搜索
以下是一个使用 ThreadPoolExecutor 进行文件搜索的示例代码:
from concurrent.futures im
超级会员免费看
订阅专栏 解锁全文
1878

被折叠的 条评论
为什么被折叠?



