【问题标题】:Python Multiprocessing imapPython 多处理 imap
【发布时间】:2017-04-18 16:24:19
【问题描述】:

今天我又有一个关于多处理的问题...... 我有一个小示例代码:

import multiprocessing

def function(a):
    v = a**2
    w = a**3
    x = a**4
    y = a**5
    z = a**6


b = [1,2,3,4,5,6,7,8,9,10]

if __name__ == "__main__":
    pool = multiprocessing.Pool(processes=4)
    pool.imap(function, b)

结果应该是 5 个列表(vlist、wlist、xlist、ylist 和 zlist)。 vlist 应该有所有的 v 结果, wlist 应该有 w 结果等等。 我想订购所有结果,所以我想使用 imap,我希望它是正确的方式。 我以为我可以使用诸如附加命令之类的东西,但我不知道如何...

感谢您的帮助, 约翰

【问题讨论】:

  • 您的函数实际上并没有做任何事情,因为 v, w, x, y, z 实际上并不存在。为了使用imap(),你的函数需要返回一个值。

标签: python dictionary multiprocessing pool


【解决方案1】:

imap() 或任何映射函数采用一个值并通过函数的返回值将其“映射”到另一个值。在您发布的 sn-p 中,function() 不返回任何内容。

import multiprocessing

def function(a):
    v = a**2
    w = a**3
    x = a**4
    y = a**5
    z = a**6
    return v, w, x, y, z

b = [1,2,3,4,5,6,7,8,9,10]

pool = multiprocessing.Pool(processes=4)
vals = pool.imap(function, b)

for i in vals:
    print i

输出是:

(1, 1, 1, 1, 1)
(4, 8, 16, 32, 64)
(9, 27, 81, 243, 729)
(16, 64, 256, 1024, 4096)
(25, 125, 625, 3125, 15625)
(36, 216, 1296, 7776, 46656)
(49, 343, 2401, 16807, 117649)
(64, 512, 4096, 32768, 262144)
(81, 729, 6561, 59049, 531441)
(100, 1000, 10000, 100000, 1000000)

【讨论】:

    猜你喜欢
    • 2017-04-09
    • 2021-12-23
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 2019-01-03
    相关资源
    最近更新 更多