账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    python 如何将一个跨进程dict用共享内存实现?
    75
    0

    场景

    有一个dict需要在跨很多进程,每次跨进程这个dict都会增减一些数据,数据大小不定

    说起跨进程,优先考虑的当然是共享内存,但是大小不定这个情况又得由自己来实现动态扩容,请问各位有过这个经验么,共享内存是否可行?实现起来效果如何呢?

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 一骑轻尘 普通会员 1楼

      在Python中,我们可以使用multiprocessing模块的LockQueue类来实现跨进程的共享内存。以下是一个简单的示例:

      ```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 value
      

      if 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和一个锁lockprocess_dict函数用于处理字典,process_dict_range函数用于处理字典的范围。在process_dict_range函数中,我们首先获取共享内存中的值,然后检查是否为None。如果是,我们设置值为None。最后,我们返回值。

      main函数中,我们创建了三个进程,每个进程都调用process_dict函数来处理字典。然后,我们等待所有进程完成,最后打印共享内存中的值。

    更多回答
    扫一扫访问手机版