<bdo id='lD2ml'></bdo><ul id='lD2ml'></ul>
<tfoot id='lD2ml'></tfoot>
        <i id='lD2ml'><tr id='lD2ml'><dt id='lD2ml'><q id='lD2ml'><span id='lD2ml'><b id='lD2ml'><form id='lD2ml'><ins id='lD2ml'></ins><ul id='lD2ml'></ul><sub id='lD2ml'></sub></form><legend id='lD2ml'></legend><bdo id='lD2ml'><pre id='lD2ml'><center id='lD2ml'></center></pre></bdo></b><th id='lD2ml'></th></span></q></dt></tr></i><div id='lD2ml'><tfoot id='lD2ml'></tfoot><dl id='lD2ml'><fieldset id='lD2ml'></fieldset></dl></div>
        <legend id='lD2ml'><style id='lD2ml'><dir id='lD2ml'><q id='lD2ml'></q></dir></style></legend>
      1. <small id='lD2ml'></small><noframes id='lD2ml'>

        python多进程基础详解

        时间:2023-12-16
        • <tfoot id='4CDBp'></tfoot>
            <tbody id='4CDBp'></tbody>
          <legend id='4CDBp'><style id='4CDBp'><dir id='4CDBp'><q id='4CDBp'></q></dir></style></legend>

          • <bdo id='4CDBp'></bdo><ul id='4CDBp'></ul>

            <small id='4CDBp'></small><noframes id='4CDBp'>

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

                  Python多进程基础详解

                  什么是多进程

                  进程是程序执行时的一个实例,每个进程都有独立的内存空间和系统资源。而多进程是指在同一时间内,存在多个进程在系统中运行,这些进程可以并发执行,互不干扰。

                  使用多进程可以显著提高程序的运行效率。Python中通过使用multiprocessing模块来实现多进程。

                  多进程的创建

                  创建多进程有两种方式:fork和spawn。在Windows操作系统上使用multiprocessing需要使用spawn方式。

                  fork方式

                  在Unix/Linux系统上可以使用fork方式创建多进程。fork方式是通过在父进程中调用os.fork()方法来创建一个子进程,并且子进程会完全复制父进程的环境变量、资源等。

                  示例代码:

                  import os
                  
                  def child_process():
                      print(f"Child process id: {os.getpid()}")
                  
                  def parent_process():
                      print(f"Parent process id: {os.getpid()}")
                      print("Create child process.")
                      pid = os.fork()
                      if pid == 0:
                          child_process()
                      else:
                          print(f"Created child process with pid: {pid}")
                  
                  if __name__ == '__main__':
                      parent_process()
                  

                  输出:

                  Parent process id: 12345
                  Create child process.
                  Created child process with pid: 23456
                  Child process id: 23456
                  

                  spawn方式

                  在Windows操作系统上使用spawn方式创建多进程。spawn方式是父进程生成一个新的Python解释器实例,并在这个新实例中执行子进程的代码。

                  示例代码:

                  from multiprocessing import Process
                  import os
                  
                  def child_process():
                      print(f"Child process id: {os.getpid()}")
                  
                  def parent_process():
                      print(f"Parent process id: {os.getpid()}")
                      print("Create child process.")
                      p = Process(target=child_process)
                      p.start()
                      p.join()
                  
                  if __name__ == '__main__':
                      parent_process()
                  

                  输出:

                  Parent process id: 12345
                  Create child process.
                  Child process id: 23456
                  

                  进程间通讯

                  多进程之间不能直接共享数据,需要通过进程间通讯来实现数据共享。

                  multiprocessing模块提供了多种进程间通讯的方式,如:Queue、Pipe等。

                  Queue

                  Queue是用于进程间通讯的队列,它本身是进程安全的。

                  示例代码:

                  from multiprocessing import Process, Queue
                  import os
                  import time
                  
                  def child_process(queue):
                      print(f"Child process id: {os.getpid()}")
                      while True:
                          if not queue.empty():
                              msg = queue.get()
                              print(f"Child process received msg: {msg}")
                              if msg == 'finish':
                                  break
                          time.sleep(1)
                  
                  def parent_process():
                      print(f"Parent process id: {os.getpid()}")
                      q = Queue()
                      p = Process(target=child_process, args=(q,))
                      p.start()
                      for i in range(5):
                          q.put(f"msg {i}")
                      q.put("finish")
                      p.join()
                  
                  if __name__ == '__main__':
                      parent_process()
                  

                  输出:

                  Parent process id: 12345
                  Child process id: 23456
                  Child process received msg: msg 0
                  Child process received msg: msg 1
                  Child process received msg: msg 2
                  Child process received msg: msg 3
                  Child process received msg: msg 4
                  

                  Pipe

                  Pipe是用于进程间通讯的管道,它本身也是进程安全的。

                  示例代码:

                  from multiprocessing import Process, Pipe
                  import os
                  import time
                  
                  def child_process(conn):
                      print(f"Child process id: {os.getpid()}")
                      while True:
                          msg = conn.recv()
                          print(f"Child process received msg: {msg}")
                          if msg == 'finish':
                              break
                      conn.close()
                  
                  def parent_process():
                      print(f"Parent process id: {os.getpid()}")
                      conn_parent, conn_child = Pipe()
                      p = Process(target=child_process, args=(conn_child,))
                      p.start()
                      for i in range(5):
                          conn_parent.send(f"msg {i}")
                      conn_parent.send("finish")
                      p.join()
                  
                  if __name__ == '__main__':
                      parent_process()
                  

                  输出:

                  Parent process id: 12345
                  Child process id: 23456
                  Child process received msg: msg 0
                  Child process received msg: msg 1
                  Child process received msg: msg 2
                  Child process received msg: msg 3
                  Child process received msg: msg 4
                  

                  总结

                  本文介绍了Python中使用multiprocessing模块实现多进程和进程间通讯的基础知识。其中包括多进程的创建方式,以及多种进程间通讯的方式。在实际开发中,多进程可以有效提升程序的运行效率,同时进程间通讯也是保证多进程并发执行的关键。

                  上一篇:python继承threading.Thread实现有返回值的子类实例 下一篇:如何用python反转图片,视频

                  相关文章

                1. <legend id='zy7Uh'><style id='zy7Uh'><dir id='zy7Uh'><q id='zy7Uh'></q></dir></style></legend>

                    • <bdo id='zy7Uh'></bdo><ul id='zy7Uh'></ul>

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

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