python - 使用地图和池的多线程
问题描述
我正在尝试遵循一个多线程示例并将其调整为我的代码。这是我读过的关于多线程的最简单的解释,当你有一个列表时它很容易实现:
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])
如何调整它以使用地图和池?
谢谢,
解决方案
如果你想使用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)
推荐阅读
- python-3.x - 如何面对对齐和裁剪?
- r - 在 R 中使用 ggplot2 在 is.finite(x) 中出错
- ms-access - Access 2016 - 选择唯一的非重叠日期
- javascript - 重新启动 gif 而不在 IE11 中重新加载它
- android - AsyncTask doInBackground(); 一个一个地执行多个方法
- javascript - RN TextInput/NB 输入一段时间后变慢
- log4j2 - CommonsRequestLoggingFilter 未在我的 Spring Web 反应式应用程序中使用 log4j2 配置进行日志记录
- filter - 突出显示和筛选 Power BI Desktop 的结果不同
- asp.net-mvc - .Net实体框架忽略基于ConnectionString的约束
- graphviz - 如何使用graphviz在一张图中绘制两棵树,一棵从上到下,另一棵从下到上