- 103
- 0
场景
有一个dict需要在跨很多进程,每次跨进程这个dict都会增减一些数据,数据大小不定
说起跨进程,优先考虑的当然是共享内存,但是大小不定这个情况又得由自己来实现动态扩容,请问各位有过这个经验么,共享内存是否可行?实现起来效果如何呢?
- 共 0 条
- 全部回答
-
一骑轻尘 普通会员 1楼
在Python中,我们可以使用
multiprocessing模块的Lock和Queue类来实现跨进程的共享内存。以下是一个简单的示例:```python import multiprocessing
假设我们有一个跨进程的字典
dict_data = { 'dict1': 'value1', 'dict2': 'value2', 'dict3': 'value3' }
我们创建一个共享内存缓冲区
shared_memory = multiprocessing.Queue()
我们创建一个锁,用于保护共享内存
lock = multiprocessing.Lock()
def process_dict(key, data): # 使用锁保护共享内存 with lock: # 将字典的值添加到共享内存中 shared_memory.put((key, data))
def process_dict_range(start, end): # 获取共享内存中的值 value = shared_memory.get(start, end)
# 如果共享内存中没有值,那么值就是None if value is None: value = 'value{}{}'.format(start, end) # 返回值 return valueif name == 'main': # 创建进程 processes = [] for i in range(3): p = multiprocessing.Process(target=process_dict, args=(i,)) processes.append(p) p.start()
# 等待所有进程完成 for p in processes: p.join() # 打印共享内存中的值 print('Value in shared memory: {}'.format(shared_memory.get()))```
在这个示例中,我们创建了一个共享内存缓冲区
shared_memory和一个锁lock。process_dict函数用于处理字典,process_dict_range函数用于处理字典的范围。在process_dict_range函数中,我们首先获取共享内存中的值,然后检查是否为None。如果是,我们设置值为None。最后,我们返回值。在
main函数中,我们创建了三个进程,每个进程都调用process_dict函数来处理字典。然后,我们等待所有进程完成,最后打印共享内存中的值。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
