并行化字典理解

2024-03-04

我有以下功能和字典理解:

def function(name, params):
    results = fits.open(name)
    <do something more to results>
    return results

dictionary = {name: function(name, params) for name in nameList}

并希望将其并行化。有什么简单的方法可以做到这一点吗?

In here https://stackoverflow.com/questions/20190668/python-multiprocessing-a-for-loop我已经看到multiprocessing可以使用模块,但无法理解如何让它将我的结果传递到我的字典中。

NOTE:如果可能,请给出一个可以应用于任何返回结果的函数的答案。

NOTE 2:主要是操作拟合文件并将结果分配给一个类

UPDATE

所以这就是最终对我有用的(来自@code_onkel答案):

def function(name, params):
    results = fits.open(name)
    <do something more to results>
    return results

def function_wrapper(args):
    return function(*args)

params = [...,...,..., etc]    

p = multiprocessing..Pool(processes=(max([2, mproc.cpu_count() // 10])))
args_generator = ((name, params) for name in names)

dictionary = dict(zip(names, p.map(function_wrapper, args_generator)))

使用 tqdm 仅部分有效,因为我可以使用自定义栏,因为 tqdm 恢复为仅包含迭代的默认栏。


字典理解本身不能并行化。这是一个如何使用的示例multiprocessing使用 Python 2.7 的模块。

from __future__ import print_function
import time
import multiprocessing

params = [0.5]

def function(name, params):
    print('sleeping for', name)
    time.sleep(params[0])
    return time.time()

def function_wrapper(args):
    return function(*args)

names = list('onecharNAmEs')

p = multiprocessing.Pool(3)
args_generator = ((name, params) for name in names)
dictionary = dict(zip(names, p.map(function_wrapper, args_generator)))
print(dictionary)
p.close()

这适用于任何函数,尽管的限制multiprocssing module https://docs.python.org/2.7/library/multiprocessing.html#programming-guidelines申请。最重要的是,作为参数传递的类和返回值以及要并行化的函数本身必须在模块级别定义,否则(反)序列化器将找不到它们。包装函数是必要的,因为function()有两个参数,但是Pool.map()只能处理带有一个参数的函数(作为内置的map()功能)。

使用 Python >3.3 可以通过使用来简化Pool作为上下文管理器和starmap()功能。

from __future__ import print_function
import time
import multiprocessing

params = [0.5]

def function(name, params):
    print('sleeping for', name)
    time.sleep(params[0])
    return time.time()

names = list('onecharnamEs')

with multiprocessing.Pool(3) as p:
    args_generator = ((name, params) for name in names)
    dictionary = dict(zip(names, p.starmap(function, args_generator)))

print(dictionary)

这是一个更易读的版本with block:

with multiprocessing.Pool(3) as p:
    args_generator = ((name, params) for name in names)
    results = p.starmap(function, args_generator)
    name_result_tuples = zip(names, results)
    dictionary = dict(name_result_tuples)

The Pool.map()function 适用于具有单个参数的函数,这就是为什么Pool.starmap()3.3 中添加了该功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并行化字典理解 的相关文章

随机推荐

  • pandas 中的 read_table 和 read_csv 有区别吗?

    我已经对其进行了测试 并检查了文档 没有发现明显的差异 无论哪种方式 我都想问以防万一 您是否认为 read csv 应该仅用于 csv 即使它适用于其他类型 而 read table 有什么作用 它们存在时是否相同 您可以使用其中之一来处
  • 使用 Google+ 环聊 API

    如果有人添加 电子邮件受保护 cdn cgi l email protection到他的 Google Hangout 联系人并向其发送一条 Google Hangout Chat 消息 我想从我的服务器设置自动回复他的聊天 有没有办法做到
  • C# 遍历二维数组

    for int k 0 k lt odds GetLength 1 k 上面的代码行应该迭代 Double 类型的二维数组 但不断抛出以下异常 索引超出范围异常 有哪位好心人能解释一下原因并提供解决方案吗 非常感谢 您正在将无效索引传递给G
  • 是否可以为条形图中的每个类别自定义标签?

    最近 我收到一个要求 需要创建一个显示每个项目数据的条形图 这是一个例子 如您所见 Category是项目的名称 并且Series是该项目中不同类型的数据 但是 由于系统不保证项目名称的唯一性 将其用作类别可能会导致问题 并且我将无法使用项
  • CakePHP Cookie 被打乱 - Suhosin 相关

    由于某种原因 在设置后 我无法在任何页面上读取 CakePHP 应用程序中的任何 cookie 唯一返回的是乱码文本 我的代码很简单 this gt Cookie gt write Region test reg this gt Cooki
  • Linux 系统调用的内部结构

    当线程通过引发中断 80 进行系统调用时会发生什么 详细 Linux 对线程的堆栈和其他状态做了什么工作 对处理器进行了哪些更改才能将其置于内核模式 运行中断处理程序后 控制权如何恢复到调用进程 如果系统调用无法快速完成怎么办 例如从磁盘读
  • 有没有办法让 SQLAlchemy 不在 BEGIN 和 COMMIT 中包装 SQL 写入?

    我在 Pylons 1 0 框架上使用 SQLAlchemy 0 6 4 我已经尝试了将 autoflush 和 autocommit 设置为 True 和 False 的所有排列 但我发现 SQLAlchemy 想要包装所有 SQL 会话
  • R 包不存在

    我收到了可怕的包裹R不存在 它要了我的命 代码很好 我在市场上有运行该代码的应用程序 现在效果很简单webview应用程序 的 0 R string app name我的有错吗main xml and string xml很好 我很困惑 我
  • Libgdx - 支持 OpenGL 4+

    是否可以仅使用 Libgdx 进行桌面开发并从 Libgdx 抽象访问较新版本的 Opengl 我的意思是 如果你想开发移动应用程序 你将必须使用 Opengl ES 的某个版本 它不支持经典 Opengl 那样的很多功能 例如绘制线框等
  • Django-channels:ChatConsumer 仅向一个用户发送消息,而不是向两个用户发送消息

    我正在使用 django channels 和 redis 在 django 和 Angular 中实现聊天应用程序 套接字已连接并正常工作 但我面临的问题是 当两个用户在线并使用相同的线程 url 连接同一个聊天室时 它会连接 但任何用户
  • 使用包含单行分区的 Cassandra 表是一种不好的做法吗?

    假设我有一张这样的桌子 CREATE TABLE request transaction id text request date timestamp data text PRIMARY KEY transaction id 据我了解 tr
  • PHP 包含绝对路径

    我的网站上有一个名为 basePath 的变量 其设置为 basePath Systems dgw 我在所有 css js 和图像标签上使用它 为了更好的可见性而缩短 我对这些包含没有任何问题 它们在我所在的任何文件和文件夹中都可以正常工作
  • pip 安装错误:SyntaxError:语法无效

    尝试在 CentOS6 上安装 virtualenv requests 或 pex 时 pip install 不起作用 我使用的是 python2 6 和 pip 9 0 1 谁能告诉我为什么会发生这种情况 pex build root
  • 如何获取点击了哪个按钮?

    我想在单击特定按钮时检查某些条件 该怎么做 document ready function var prm Sys WebForms PageRequestManager getInstance prm add initializeRequ
  • Android 数据绑定构建错误:[数据绑定插件]:无法设置数据绑定

    我正在使用 Google 的 Android 数据绑定库 我曾经使用过该库 现在 似乎 某些东西 发生了变化 并且给数据绑定库带来了问题 我被一个非常普遍的错误所困扰 该错误被证明很难调试 data binding plugin faile
  • Kafka连接消费者引用偏移量并存储在消息中

    如果我使用 kafka connect 来消费消息并存储到 s3 使用 kafka connect s3 连接器 我是否可以将消息偏移量与事件负载一起存储 我希望使用这些数据对消息进行一些排序 并检查是否存在任何间隙或检查我收到的消息中是否
  • 如何在 iOS 中的 TableView 中添加工具栏

    我正在构建一个简单的笔记应用程序 我想在 TableView 的底部添加一个静态栏 例如 我想添加一个帮助按钮 我怎样才能只对我的 TableView 执行此操作 So far 我通过情节提要添加了一个工具栏 但这使得它粘在最后制作的 ta
  • 使用 $compile 测试 ng-if

    我试图通过针对预定义范围编译视图并运行 scope digest 来测试我的模板之一中的 ng if 我发现无论我的条件是真还是假 编译的模板都是一样的 我希望编译后的 html 在 false 时删除 ng if dom 元素 befor
  • 将“pip install”分解为较小的步骤,以便我可以在安装之前编辑包

    我对 pip 的熟悉最终使我能够执行以下操作 pip install pip uninstall 和 pip list 将我想要安装的包的名称作为单个参数 到目前为止 这种有限的知识使我能够安装大多数简单的软件包 有时 如果幸运的话 我什至
  • 并行化字典理解

    我有以下功能和字典理解 def function name params results fits open name