当前位置: 首页 > 面试题库 >

如何在Python中并行化列表理解计算?

游安康
2023-03-14
问题内容

列表理解和映射计算都应该(至少在理论上)相对容易并行化:列表理解内的每个计算都可以独立于所有其他元素的计算来完成。例如在表达式中

[ x*x for x in range(1000) ]

每个x * x计算都可以(至少在理论上)并行完成。

我的问题是:是否有任何Python模块/ Python实施/ Python编程技巧可并行化列表理解计算(以便使用所有16​​/32 /
…内核或将计算分布在计算机网格或在云上)?


问题答案:

正如Ken所说,它不能,但是使用2.6的多处理模块,可以很容易地并行化计算。

import multiprocessing

try:
    cpus = multiprocessing.cpu_count()
except NotImplementedError:
    cpus = 2   # arbitrary default


def square(n):
    return n * n

pool = multiprocessing.Pool(processes=cpus)
print(pool.map(square, range(1000)))

文档中还有一些示例显示了如何使用Managers进行此操作,这也应允许进行分布式计算。



 类似资料:
  • 问题内容: 我想从Python中的常量列表创建lambda对象列表;例如: 但是,当我运行它们时,这将创建一个lambda对象列表: 我希望它会打印 而是打印: 似乎所有lambda都被赋予了错误的参数。我做错了什么,有办法解决吗?我认为我使用的是Python 2.4。 编辑:更多尝试的事情,例如这样: 打印从1到25的期望平方,然后使用之前的print语句: 仍然给了我全部。现有的lambda对

  • 当我使用spark API运行类似的代码时,它在许多不同的(分布式)作业中运行,并且成功运行。当我运行它时,我的代码(应该做与Spark代码相同的事情),我得到一个堆栈溢出错误。知道为什么吗? 代码如下: 我相信我正在使用与spark相同的所有并行化工作,但它对我不起作用。任何关于使我的代码分发/帮助了解为什么在我的代码中发生内存溢出的建议都将是非常有帮助的

  • 问题内容: 我刚接触Python,但仍处于学习曲线的艰难阶段。感谢您的任何评论。 我有一个很大的for循环要运行(在许多迭代中都很大),例如: 我虽然认为这将是一个如何并行化的常见问题,但在Google上搜索了数小时后,我使用“多重处理”模块找到了解决方案,如下所示: 当循环较小时,此方法有效。但是,如果循环很大,这确实很慢,或者如果循环太大,有时会发生内存错误。看来python会首先生成参数列表

  • 问题内容: 在Python中有两个可迭代的对象,我想成对地讨论它们: 导致: 一种方法是遍历索引: 问题答案: Python 3 当或的较短者停止时,停止。 在Python 3 中,像在Python2中一样,返回元组的迭代器。要获取元组列表,请使用。要压缩直到两个迭代器都用尽,可以使用 。 Python 2 在Python 2中, 返回一个元组列表。当且不是很大时,这很好。如果它们都是大量的,则形

  • 问题内容: 我有一个清单: 我不止一次要从列表中删除它。我的结果应该是: 注意: 此处无法正常工作并引发错误。 问题答案: 如果您的值是可哈希的,那么它将起作用: 编辑: 我尝试了一下,没有重复,它似乎工作正常 和

  • 问题内容: 我有两个清单如下 我想提取物项从当他们在: 如何将两个循环写为单行列表理解? 问题答案: 应该这样做: