我如何调整我的代码以进行多处理

JP威尔逊

每当我使用我的(其他)多处理代码时,它都可以正常工作,但是根据我对脚本完成情况的反馈,例如“已完成5/10个文件”,我不知道如何适应我的代码以返回计数。基本上,我想修改以下代码以允许进行多处理。

所以我用

file_paths = r"path to file with paths"
count = 0
pool = Pool(16)
pool.map(process_control, file_paths)
pool.close()
pool.join()

在process_control中,我在函数末尾 count += 1 and return count

我想等价的代码会像

def process_control(count, file_path):
    do stuff
    count += 1
    print("Process {} / {} completed".format(count, len(file_paths))
    return count


file_paths = r"path to file with paths" 
count = 0 
for path in file_paths:
    count = process_control(count, path)

这样的事情。希望我的解释清楚。

德莱尼

每个子流程都有自己的副本,count因此他们所能做的就是跟踪该流程中的工作。该计数不会汇总所有进程。但是父母可以计算。map等待所有任务完成,因此无济于事。imap更好,可以进行迭代,但也可以保持顺序,因此报告仍会延迟。imap_unordered块大小为1的最佳选择。每个任务的返回值(即使它为None)都将立即返回。

def process_control(count, file_path):
    do stuff

file_paths = ["path1", ...]
with multiprocessing.Pool(16) as pool:
    count = 0
    for _ in pool.imap_unordered(porcess_control, file_paths,chunksize=1):
         count += 1
        print("Process {} / {} completed".format(count, len(file_paths))

关于的注释chunksize使用池有成本-每个工作项都需要发送到子流程并返回其值。这种来回的IPC相对昂贵,因此池将“打包”工作项,这意味着它将把多个工作项全部发送到给定的子流程中,并且该流程仅在整个数据块时才返回已经通过worker函数进行了处理。

当有许多相对较短的工作项目时,这很棒。但是,假设不同的工作项需要花费不同的时间来执行。即使其他子进程已经完成,仍将有一个高杆子进程在其块上运行。

对于您的情况而言更重要的是,结果要等到块完成后才回传给父级,这样您就无法实时获得完成情况的报告。

将chunksize设置为1,子流程将立即返回结果,以实现更准确的计费。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将我的代码从多处理更改为普通

来自分类Dev

我如何在多处理中同步 list 和 int?

来自分类Dev

如何调整我的代码以适应 Django 升级?

来自分类Dev

为什么我的多处理代码停止处理大型数据集?

来自分类Dev

如何对包含多处理的函数进行多处理?

来自分类Dev

如何改进我的代码以处理大数字?

来自分类Dev

我想让我的表单处理代码可重用,但是如何?

来自分类Dev

我如何调整我的iframe

来自分类Dev

如何调整我的GLSL代码以添加其他光源?

来自分类Dev

我试图了解如何通过多处理共享只读对象

来自分类Dev

非平凡的重新编码:如何加速我的程序?Cython、numba、多处理和 numpy?

来自分类Dev

代码效果很好,但是我不知道如何在第二步中进行逆向处理

来自分类Dev

我应该如何调整我的代码以实现TBytes和TIdBytes之间的兼容性?

来自分类Dev

我需要Python多处理环境中的高效共享字典

来自分类Dev

我的python多处理程序按顺序运行工作程序

来自分类Dev

为什么多处理Julia会中断我的模块导入?

来自分类Dev

我正在尝试针对未找到搜索项的代码进行调整

来自分类Dev

如何优化我的代码以处理此特殊事件

来自分类Dev

我应该如何重组此事件处理代码?

来自分类Dev

我的代码如何知道它处理哪个.dll?

来自分类Dev

如何将我的处理代码组织在单独的文件中?

来自分类Dev

我不知道如何处理此PHP代码

来自分类Dev

循环此代码时我将如何处理?

来自分类Dev

如何使用tensorflow-gpu对子任务进行多处理?

来自分类Dev

我如何使我的代码更短

来自分类Dev

我如何调整jscrollpane的大小

来自分类Dev

我如何调整jscrollpane的大小

来自分类Dev

我如何调整jscrollpane的大小

来自分类Dev

我该如何“调整” VLOOKUP?

Related 相关文章

  1. 1

    将我的代码从多处理更改为普通

  2. 2

    我如何在多处理中同步 list 和 int?

  3. 3

    如何调整我的代码以适应 Django 升级?

  4. 4

    为什么我的多处理代码停止处理大型数据集?

  5. 5

    如何对包含多处理的函数进行多处理?

  6. 6

    如何改进我的代码以处理大数字?

  7. 7

    我想让我的表单处理代码可重用,但是如何?

  8. 8

    我如何调整我的iframe

  9. 9

    如何调整我的GLSL代码以添加其他光源?

  10. 10

    我试图了解如何通过多处理共享只读对象

  11. 11

    非平凡的重新编码:如何加速我的程序?Cython、numba、多处理和 numpy?

  12. 12

    代码效果很好,但是我不知道如何在第二步中进行逆向处理

  13. 13

    我应该如何调整我的代码以实现TBytes和TIdBytes之间的兼容性?

  14. 14

    我需要Python多处理环境中的高效共享字典

  15. 15

    我的python多处理程序按顺序运行工作程序

  16. 16

    为什么多处理Julia会中断我的模块导入?

  17. 17

    我正在尝试针对未找到搜索项的代码进行调整

  18. 18

    如何优化我的代码以处理此特殊事件

  19. 19

    我应该如何重组此事件处理代码?

  20. 20

    我的代码如何知道它处理哪个.dll?

  21. 21

    如何将我的处理代码组织在单独的文件中?

  22. 22

    我不知道如何处理此PHP代码

  23. 23

    循环此代码时我将如何处理?

  24. 24

    如何使用tensorflow-gpu对子任务进行多处理?

  25. 25

    我如何使我的代码更短

  26. 26

    我如何调整jscrollpane的大小

  27. 27

    我如何调整jscrollpane的大小

  28. 28

    我如何调整jscrollpane的大小

  29. 29

    我该如何“调整” VLOOKUP?

热门标签

归档