这个公共变量是个字典,进程中各自读取、更新作这个字典内的对应项,不会有进程同时操作同一个项,
例如:
dict_var = {
"zhangsan":{
# some code
},
"lisi":{
# some code
}
# more items
}
# 进程 1 只会读取、更新 dict_var['zhangsan']
# 进程 2 只会读取、更新 dict_var['lisi']
1
aptx4689 2021-11-02 19:54:07 +08:00 via iPhone
自己加个锁?
|
2
xiaofengchen 2021-11-02 20:11:52 +08:00
可以直接操作,在进程启动前声明 dict_var 就行
缺点是,进程启动后,内部只看得到启动前的 dict_var 以及自己修改的部分,其它进程修改部分是不可见的。 如果需要共享内存,参考 https://docs.python.org/zh-cn/3/library/multiprocessing.shared_memory.html |
3
keroppi OP @xiaofengchen 多谢多谢,看了眼,是 3.8 新版功能.难怪没印象,我去学习学习
|
4
UN2758 2021-11-03 10:16:08 +08:00
如果多个线程操作一个字典的不同字段,这可以分开成两个字典独立操作,最后合并到一起,为什么放到一起呢
|
6
julyclyde 2021-11-03 12:26:20 +08:00
楼上说的对
|
7
apake 2021-11-03 13:40:34 +08:00
既然各个进程 读取更新属于 各自的 变量, 为什么要放在一个 dict 里面呢. 最后处理完在合并不行么?
|
8
keroppi OP 是的,考虑到这个,换成 redis 了,各自维护 hash 中的数据
|
9
ClericPy 2021-11-04 21:04:22 +08:00
避免竞争的简单方法比如队列, 比如锁...
你这场景, 队列吧, 虽然我自己都没怎么用过多进程的队列或者 manager 那些... |