Python 多进程字典列表

2024-01-04

我需要使用 Python 3.6 在多进程中做一些事情。也就是说,我必须更新一个添加对象列表的字典。由于这些对象是不可拾取的,我需要使用dill代替pickle and multiprocess from pathos代替multiprocessing,但这不应该是问题。

将列表添加到字典中需要在添加到字典之前重新序列化列表。这会减慢一切速度,并且花费的时间与没有多重处理时相同。你能给我建议一个解决方法吗?

这是我使用 python 3.6 的代码:init1正在工作但速度很慢,init2速度快但是坏了。剩下的仅用于测试目的。

import time

def init1(d: dict):
    for i in range(1000):
        l = []
        for k in range(i):
             l.append(k)
        d[i] = l

def init2(d: dict):
    for i in range(1000):
        l = []
        d[i] = l
        for k in range(i):
            l.append(i)

def test1():
    import multiprocess as mp
    with mp.Manager() as manager:
        d = manager.dict()
        p = mp.Process(target=init1, args=(d,))
        p.start()
        p.join()
        print(d)

def test2():
    import multiprocess as mp
    with mp.Manager() as manager:
        d = manager.dict()
        p = mp.Process(target=init2, args=(d,))
        p.start()
        p.join()
        print(d)

start = time.time()
test1()
end = time.time()
print('test1: ', end - start)


start = time.time()
test2()
end = time.time()
print('test2: ', end - start)

使用管道的可能解决方案。在我的电脑上,这需要 870 毫秒,而其他电脑则需要 1.10 秒test1和200ms的test2.

def init3(child_conn):
    d = {}
    for i in range(1000):
        l = []
        for k in range(i):
            l.append(i)
        d[i] = l
    child_conn.send(d)

def test3():
    import multiprocess as mp
    parent_conn, child_conn = mp.Pipe(duplex=False)
    p = mp.Process(target=init3, args=(child_conn,))
    p.start()
    d = parent_conn.recv()
    p.join()

在jupyter上,通过使用魔法%timeit I get:

In [01]: %timeit test3()
872 ms ± 11.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [02]: %timeit test2()
199 ms ± 1.72 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [03]: %timeit test1()
1.09 s ± 10.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 多进程字典列表 的相关文章

随机推荐

  • 使用 C++ 尾随返回类型时 auto 的含义是什么?

    而不是平常 void foo void cout lt lt Meaning of life lt lt 42 lt lt endl C 11允许是一种替代方案 使用尾随返回 auto bar void gt void cout lt lt
  • 构建将工作表导出为 PDF 的链接

    我一直在尝试将特定工作表导出为 PDF 以用于邮寄目的 并发现我需要它们采用特定格式 我到处寻找要使用的代码 最终发现了这个 https issuetracker google com issues 36761058 comment24 h
  • 水平缩放和垂直缩放是什么意思? [复制]

    这个问题在这里已经有答案了 在数据库位于第四层的三层架构中 什么是scaling horizontally and scaling vertically mean 简单来说 横向扩展就是添加更多服务器 纵向增加服务器的资源 您可以找到更多信
  • Terraformer 合并多个 tfstate 文件

    我正在使用 terraformer 导入 不是 terraform 检查这个 https github com GoogleCloudPlatform terraformer https github com GoogleCloudPlat
  • 无法在c#中启动资源管理器进程,只能启动窗口文件资源管理器

    我想启动资源管理器进程 使用任务栏等 但是当我启动它 在代码中 时 我只打开文件资源管理器的窗口 而不是其余的 但如果我在任务管理器中执行 explorer exe 它就会起作用 就在我在 Windows 7 64 位机器上执行此操作时 在
  • 从S3读取文件到kafka主题

    我遇到的情况是 所有事件数据都存储在 s3 存储桶中 我需要将其从 S3 获取到 ec2 上的 Kafka 主题 我正在使用 CamelAWSS3Connector 但面临连接器无法工作的问题 以下是我面临的错误 2023 01 06 10
  • 在 MVC Action 中启动和忘记异步任务

    我有一个标准的非异步操作 例如 HttpPost public JsonResult StartGeneratePdf int id PdfGenerator Current GenerateAsync id return Json nul
  • xsl-fo fop 0.94 使用 keep-together 和 wrap-option="wrap"

    在 xsl fo fop 0 94 中 将 keep together 与 wrap option wrap 一起使用会忽略换行选项吗 有没有办法让它们都工作
  • 使用 mongoose 在 mongoDB 集合中保留单个文档[重复]

    这个问题在这里已经有答案了 我创建了一个集合 但其中应该保留一个文档 如何确保 mongoose 模式中有单个文档 您可以创建 上限 集合 在其中可以设置可以存储在其中的文档限制 但是 它不会阻止添加另一个文档 不确定 如果您需要该功能 如
  • Rails 中有没有任何方法可以将分钟作为整数转换为天、月等

    我有一个以分钟为单位的值列表 我想轻松地将其转换为最接近的匹配项 如下所示 10 gt 10 minutes 1440 gt 1 day 86400 gt 2 months 525600 gt 1 year Rails 有没有简单的方法可以
  • pyodbc- SQL Server 连接失败

    我一直在尝试连接到 Microsoft SQL Server 我已设置 ODBC 连接并且测试成功 我没有使用 Windows 身份验证连接到 SQL Server 但它不断收到此错误 无法与 Windows 身份验证一起使用 Interf
  • 如果列中的相邻单元格具有相同的值,则突出显示单元格

    我想 遍历 Excel 列 如果前面或后面的单元格具有相同的值 则用颜色标记它 例如 Column A 1 lt highlight 1 lt highlight 1 lt highlight 2 1 3 lt highlight 3 lt
  • 找不到openCV头文件

    最近在学习openCV 我按照 openCV 网站上的教程进行操作 http docs opencv org doc tutorials core how to scan images how to scan images html how
  • 给定数字 p ,在数组中找到两个元素,其乘积 = P

    我正在寻找以下解决方案 Given a array and a number P find two numbers in array whose product equals P 寻找比 O n 2 更好的解决方案 我可以使用额外的空间或其
  • R 中按两列分组和级别并集

    我陷入了一个看似微不足道的问题 但我现在无法弄清楚 我什至不知道如何正确地表述它 如果您有任何建议 欢迎您 我有一个 data frame 我想根据两列对其进行分组 索引 问题是 我想要分组的行在这些列中不共享相同的值 相反 某些行在一列中
  • 如何从外部网站获取值,而该值是由该网站中的 javascript 设置的

    我曾经使用 JQuery 加载外部网站内容 html json 我还获得了一个代理 PHP 页面 可以与一些具有严格来源政策的网站一起使用 我的问题是针对某些网站 在他们的 HTML 源代码中 span 0 00 span 在 Chrome
  • Android onClick 方法不适用于自定义视图

    我已经开始开发一个应用程序 我昨天构建了菜单 但 onClick 方法不起作用 我创建了一个扩展 View 的类 并将其称为 MainMenuObject 该类适用于主菜单中的任何对象 按钮 徽标等 我为他们创建了一个特殊的类 因为我在菜单
  • 如何使用 .fetch 函数使 API 调用在 React-Native 中兼容 IPV6?

    我开发了一个用 React Native 编写的应用程序 适用于 IOS 它在 IPV4 网络中运行良好 然而 最近苹果公司发来一条消息 称我的应用程序在 IPV6 网络中测试时无法运行 他们告诉我 我还必须使其与仅限 IPV6 的网络兼容
  • 在 HTML 文档中嵌入 TypeScript 代码

    是否可以在网页中嵌入 TypeScript 代码 我想将 TypeScript 代码嵌入到脚本标签中 如下所示 以便它自动编译为 Javascript 实际上有几个项目允许你使用这样的 TypeScript 代码 TypeScript 编译
  • Python 多进程字典列表

    我需要使用 Python 3 6 在多进程中做一些事情 也就是说 我必须更新一个添加对象列表的字典 由于这些对象是不可拾取的 我需要使用dill代替pickle and multiprocess from pathos代替multiproc