小编Car*_*ten的帖子

在流程之间分享一个令人兴奋的词典

问题陈述

我面临多处理问题.多处理堆栈溢出问题的很大一部分没有我的情况复杂,也没有回答它.有些人投票说这个问题可能重复,但我的情况有所不同,在我的情况下,共享DICT在进程之间被修改了:

我有一个程序遵循这个简化的生命周期:

A. Initialize DATA dict
B. Initialize 4 subprocess workers
C. Execute code in each workers (worker massively read DATA dict)
D. Wait workers job is done
E. Modify DATA dict content
F. Go to C
Run Code Online (Sandbox Code Playgroud)

性能是问题的一个非常重要的方面.我尝试了许多正面和负面的解决方案:

简单的全球字典(不工作)

在步骤中B,DICT变量被分叉到子流程环境中.但经过一步E子过程无法看到变化.

使用multiprocessing.Manager dict

在步骤Adict创建时multiprocessing.Manager(请参阅此处的 "服务器进程" ).

  • 优点:易于使用
  • 缺点:multiprocessing.Manager使用序列化层(我不太了解它,但它能够与网络上的进程一起工作),这对性能有害.

使用多个multiprocessing.Value和multiprocessing.Array而不是dict

multiprocessing.Valuemultiprocessing.Array允许使用共享内存.我尝试用几个替换我的dict multiprocessing.Value并且multiprocessing.Array像这样:

用dict:

manager = multiprocessing.Manager()
dict = …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

7
推荐指数
1
解决办法
559
查看次数

Python-创建具有多个键的字典,其中值也是字典

我有一本字典:

test={"11.67":1,"12.67":2}
Run Code Online (Sandbox Code Playgroud)

我想要的输出如下:

{'11.67': {'value': '11'}, '12.67': {'value': '12}}
Run Code Online (Sandbox Code Playgroud)

对键进行拆分时,第二个字典中的值是第一个索引。

我这样写:

test={"11.67":1,"12.67":2}
indexes=test.keys()
final_dict={}
temp_dict={}
for index in indexes:
    b=index.split('.')[0]
    temp_dict['value']=b;
    final_dict.update({index:temp_dict})
print (final_dict)
Run Code Online (Sandbox Code Playgroud)

但是结果是错误的:

{'11.67': {'value': '12'}, '12.67': {'value': '12'}}
Run Code Online (Sandbox Code Playgroud)

不知道出了什么问题。谢谢

还有一个更新: 我必须使用 dict_keys 索引。我必须从代​​码的那部分开始。

python dictionary python-3.x

3
推荐指数
1
解决办法
110
查看次数

标签 统计

python ×2

dictionary ×1

multiprocessing ×1

python-3.x ×1