• <legend id='bebyW'><style id='bebyW'><dir id='bebyW'><q id='bebyW'></q></dir></style></legend>

    <i id='bebyW'><tr id='bebyW'><dt id='bebyW'><q id='bebyW'><span id='bebyW'><b id='bebyW'><form id='bebyW'><ins id='bebyW'></ins><ul id='bebyW'></ul><sub id='bebyW'></sub></form><legend id='bebyW'></legend><bdo id='bebyW'><pre id='bebyW'><center id='bebyW'></center></pre></bdo></b><th id='bebyW'></th></span></q></dt></tr></i><div id='bebyW'><tfoot id='bebyW'></tfoot><dl id='bebyW'><fieldset id='bebyW'></fieldset></dl></div>
    <tfoot id='bebyW'></tfoot>

      <small id='bebyW'></small><noframes id='bebyW'>

          <bdo id='bebyW'></bdo><ul id='bebyW'></ul>
      1. Python 进程之间共享数据(全局变量)的方法

        时间:2023-12-16
          <i id='bcbiV'><tr id='bcbiV'><dt id='bcbiV'><q id='bcbiV'><span id='bcbiV'><b id='bcbiV'><form id='bcbiV'><ins id='bcbiV'></ins><ul id='bcbiV'></ul><sub id='bcbiV'></sub></form><legend id='bcbiV'></legend><bdo id='bcbiV'><pre id='bcbiV'><center id='bcbiV'></center></pre></bdo></b><th id='bcbiV'></th></span></q></dt></tr></i><div id='bcbiV'><tfoot id='bcbiV'></tfoot><dl id='bcbiV'><fieldset id='bcbiV'></fieldset></dl></div>
        1. <tfoot id='bcbiV'></tfoot>

            • <bdo id='bcbiV'></bdo><ul id='bcbiV'></ul>
            • <legend id='bcbiV'><style id='bcbiV'><dir id='bcbiV'><q id='bcbiV'></q></dir></style></legend>

                  <small id='bcbiV'></small><noframes id='bcbiV'>

                    <tbody id='bcbiV'></tbody>

                  实现多进程之间的数据共享,可以通过使用共享内存的方式,或者使用第三方库multiprocessing中提供的Manager类型,下面分别进行详细的介绍。

                  使用共享内存

                  使用共享内存的方式,需要使用multiprocessing中提供的Value、Array对象。Value用于基本类型的共享内存,而Array用于数组的共享内存。

                  Value

                  Value用于创建共享内存中的基本类型变量,并且可以通过value属性进行读写。以下为一个示例:

                  import multiprocessing
                  
                  def func(val):
                      val.value += 1
                      print(val.value)
                  
                  if __name__ == '__main__':
                      val = multiprocessing.Value('i', 0)
                      process1 = multiprocessing.Process(target=func, args=(val,))
                      process2 = multiprocessing.Process(target=func, args=(val,))
                      process1.start()
                      process2.start()
                      process1.join()
                      process2.join()
                  

                  输出结果为:

                  1
                  2
                  

                  这里创建了一个共享变量val,使用了Value对象,并且将类型指定为‘i’,即整型。在进程中,通过val.value可以进行对共享变量的读写。这里创建了两个进程,两个进程都对val进行了5次加1操作,最终输出结果为1、2。

                  Array

                  和Value类似,Array也需要指定类型,但可以指定类型为任意数组。以下为一个示例:

                  import multiprocessing
                  
                  def func(arr):
                      for i in range(len(arr)):
                          arr[i] += 1
                      print(arr[:])
                  
                  if __name__ == '__main__':
                      arr = multiprocessing.Array('i', [0, 1, 2, 3, 4])
                      process1 = multiprocessing.Process(target=func, args=(arr,))
                      process2 = multiprocessing.Process(target=func, args=(arr,))
                      process1.start()
                      process2.start()
                      process1.join()
                      process2.join()
                  

                  输出结果为:

                  [2, 3, 4, 5, 6]
                  [3, 4, 5, 6, 7]
                  

                  这里创建了一个共享数组arr,使用了Array对象,并且将类型指定为‘i’,即整型。在进程中,可以通过arr[:]来进行对共享数组的读写。这里创建了两个进程,两个进程都对arr进行了5次加1操作,最终输出结果为两个进程操作后的arr。

                  使用Manager类型

                  Manager类型可以在多进程间共享任意Python对象,包括list、dict、Queue等等,使用Manager需要深入了解Python对象的序列化和反序列化操作。以下为一个示例:

                  import multiprocessing
                  
                  def func(d):
                      d[1] = 'a'
                      print(d)
                  
                  if __name__ == '__main__':
                      manager = multiprocessing.Manager()
                      dict_shared = manager.dict()
                      dict_shared[0] = 'b'
                      process1 = multiprocessing.Process(target=func, args=(dict_shared,))
                      process2 = multiprocessing.Process(target=func, args=(dict_shared,))
                      process1.start()
                      process2.start()
                      process1.join()
                      process2.join()
                  

                  输出结果为:

                  {0: 'b', 1: 'a'}
                  {0: 'b', 1: 'a'}
                  

                  这里创建了一个共享字典dict_shared,使用了Manager对象,Manager对象可以创建一个共享变量,并且可以放进任意Python对象,如字典,字典的读写可以通过[]进行操作。这里同样创建了两个进程,对dict_shared进行读写操作,最终输出2个进程对dict_shared的读写结果。

                  总结

                  以上介绍了多进程之间共享数据的两种方法,分别是使用共享内存的方式,或者使用第三方库multiprocessing中提供的Manager类型。根据不同的使用场景,选择不同的方法。共享内存具有读写速度快的优点,但是存在数据不安全的问题;而Manager类型虽然不存在数据不安全问题,但是增加了序列化、反序列化等操作,导致读写速度相对较慢。

                  上一篇:Python简单进程锁代码实例 下一篇:Python使用tkinter加载png、jpg等图片

                  相关文章

                  1. <i id='6pZyo'><tr id='6pZyo'><dt id='6pZyo'><q id='6pZyo'><span id='6pZyo'><b id='6pZyo'><form id='6pZyo'><ins id='6pZyo'></ins><ul id='6pZyo'></ul><sub id='6pZyo'></sub></form><legend id='6pZyo'></legend><bdo id='6pZyo'><pre id='6pZyo'><center id='6pZyo'></center></pre></bdo></b><th id='6pZyo'></th></span></q></dt></tr></i><div id='6pZyo'><tfoot id='6pZyo'></tfoot><dl id='6pZyo'><fieldset id='6pZyo'></fieldset></dl></div>
                      <bdo id='6pZyo'></bdo><ul id='6pZyo'></ul>

                    <small id='6pZyo'></small><noframes id='6pZyo'>

                  2. <legend id='6pZyo'><style id='6pZyo'><dir id='6pZyo'><q id='6pZyo'></q></dir></style></legend>

                    <tfoot id='6pZyo'></tfoot>