相关疑难解决方法(0)

使用Python多处理解决令人难以置信的并行问题

如何使用多处理来解决令人尴尬的并行问题

令人尴尬的并行问题通常包括三个基本部分:

  1. 读取输入数据(来自文件,数据库,tcp连接等).
  2. 对输入数据运行计算,其中每个计算独立于任何其他计算.
  3. 写入计算结果(到文件,数据库,tcp连接等).

我们可以在两个方面并行化程序:

  • 第2部分可以在多个核上运行,因为每个计算都是独立的; 处理顺序无关紧要.
  • 每个部分都可以独立运行.第1部分可以将数据放在输入队列中,第2部分可以从输入队列中提取数据并将结果放到输出队列中,第3部分可以将结果从输出队列中拉出并写出来.

这似乎是并发编程中最基本的模式,但我仍然试图解决它,所以让我们写一个规范的例子来说明如何使用多处理来完成.

下面是示例问题:给定一个包含整数行作为输入的CSV文件,计算它们的总和.将问题分成三个部分,这些部分可以并行运行:

  1. 将输入文件处理为原始数据(整数的列表/可迭代)
  2. 并行计算数据的总和
  3. 输出总和

下面是传统的单进程绑定Python程序,它解决了以下三个任务:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# basicsums.py
"""A program that reads integer values from a CSV file and writes out their
sums to another CSV file.
"""

import csv
import optparse
import sys

def make_cli_parser():
    """Make the command line interface parser."""
    usage = "\n\n".join(["python %prog INPUT_CSV OUTPUT_CSV",
            __doc__,
            """ …
Run Code Online (Sandbox Code Playgroud)

python concurrency multiprocessing embarrassingly-parallel

80
推荐指数
4
解决办法
2万
查看次数