我面临多处理问题.多处理堆栈溢出问题的很大一部分没有我的情况复杂,也没有回答它.有些人投票说这个问题可能重复,但我的情况有所不同,在我的情况下,共享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
子过程无法看到变化.
在步骤A
dict创建时multiprocessing.Manager
(请参阅此处的 "服务器进程" ).
multiprocessing.Manager
使用序列化层(我不太了解它,但它能够与网络上的进程一起工作),这对性能有害.multiprocessing.Value
并multiprocessing.Array
允许使用共享内存.我尝试用几个替换我的dict multiprocessing.Value
并且multiprocessing.Array
像这样:
用dict:
manager = multiprocessing.Manager()
dict = …
Run Code Online (Sandbox Code Playgroud) 我有一本字典:
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 索引。我必须从代码的那部分开始。