这个公共变量是个字典,进程中各自读取、更新作这个字典内的对应项,不会有进程同时操作同一个项,
例如:
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 那些... |