首页 > 解决方案 > 使用地图和池的多线程

问题描述

我正在尝试遵循一个多线程示例并将其调整为我的代码。这是我读过的关于多线程的最简单的解释,当你有一个列表时它很容易实现:

from multiprocessing.dummy import Pool as ThreadPool 
pool = ThreadPool(4) 
results = pool.map(my_function, my_array)

哪个是多线程版本:

results = []
for item in my_array:
    results.append(my_function(item))

问题是,对于我的示例来说,我有一本字典,但由于我必须创建一个函数,所以我被困在代码的第一行,但我不知道该怎么做,因为我需要同时使用这两者函数内部 dict 的键和值。

例如,对于这个单线程版本:

thisdict =  {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}

for key in thisdict: 
    print(key, thisdict[key])

如何调整它以使用地图和池?

谢谢,

标签: pythonpython-3.xmultithreading

解决方案


如果你想使用Pool.map(),这是一个例子:

from multiprocessing.dummy import Pool as ThreadPool

def my_function(d):
    return d ** 2

my_array = [*range(20)]

pool = ThreadPool(4) 
results = pool.map(my_function, my_array)
print(results)

输出:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]

更新。 版本dict

def my_function(item):
    key, value = item
    return {"recieved_key": key, "recieved_value": value}

thisdict =  {
    "brand": "Ford",
    "model": "Mustang",
    "year": 1964
}

pool = ThreadPool(3)
results = pool.map(my_function, thisdict.items())
print(results)

推荐阅读