python - 多重处理需要更长的时间?

标签 python

我试图了解如何让 child 写入 parent 的变量。也许我在这里做错了什么,但我可以想象多重处理所花费的时间只是实际花费时间的一小部分:

import multiprocessing, time

def h(x):
    h.q.put('Doing: ' + str(x))
    return x

def f_init(q):
    h.q = q

def main():
    q = multiprocessing.Queue()
    p = multiprocessing.Pool(None, f_init, [q])
    results = p.imap(h, range(1,5))
    p.close()

-----结果-----:

1
2
3
4
Multiprocessed: 0.0695610046387 seconds
1
2
3
4
Normal: 2.78949737549e-05 seconds # much shorter

    for i in range(len(range(1,5))):
        print results.next() # prints 1, 4, 9, 16

if __name__ == '__main__':
    start = time.time()
    main()
    print "Multiprocessed: %s seconds" % (time.time()-start)             

    start = time.time()
    for i in range(1,5):
        print i
    print "Normal: %s seconds" % (time.time()-start)             

最佳答案

@Blender 基本上已经回答了你的问题,但作为评论。 多处理机制会产生一些开销,因此,如果您在没有做任何重要工作的情况下产生开销,速度会变慢。

尝试实际做一些并行性良好的工作。例如,编写Python代码打开一个文件,使用正则表达式扫描它,并提取匹配的行;然后列出十个大文件,并计算使用多处理与普通 Python 完成所有十个文件所需的时间。或者编写代码来计算昂贵的函数并尝试一下。

我使用multiprocessing.Pool()只是为了运行外部程序的一堆实例。我使用 subprocess 来运行音频编码器,它一次运行四个编码器实例,从而获得显着的加速。

关于python - 多重处理需要更长的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12067459/

相关文章:

python - 使用多个进程/并行处理

python - Pandas:如何使用查询来选择最接近的值

python - 如何使用Boto3修改API网关集成请求

python - 仅重复第一行和最后一行,时间为 pandas 数据帧的长度

python - 杀死Python中的一个线程

python - 从调试器打印 python 中所有可用的元组

python - 如何使用 xESMF 将高分辨率 GRIB 网格重新采样为较粗的分辨率?

python - 是否可以@mark.parametrize 一次测试两次?

Python ctypes 和动态链接

python - cPython 是否使用多个内核来实现排序、任意、全部等内置函数?