1. <em id="yud1w"><acronym id="yud1w"><u id="yud1w"></u></acronym></em>
      
      
      <button id="yud1w"></button>

      python

      当前位置:首页?>?python并发编程?>?当前文章

      python并发编程

      多进程修改全局变量及进程池Pool一些坑

      2020-03-14 181赞 python中国网
      每篇文章努力于解决一个问题!python高级、python面试全套、操作系统经典课等可移步文章底部。

        进程是系统进行资源分配和调度的一个独立单位,每个进程的内存单元是独立的,多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响。所以代码层面你定义一个全局变量,每个进程一开始可以使用但并不共享,进程内部会有自己的一份!

      # ‐*‐ coding: utf‐8 ‐*‐
      
      from multiprocessing import  Process
      
      num_global = 10
      
      def worker1(num):
          global num_global
          for i in range(num):
              num_global += 1
      
          print("我是worker1进程,我的结果是{0}".format(num_global))
      
      
      def worker2(num):
          global num_global
          for i in range(num):
              num_global += 1
      
          print("我是worker2进程,我的结果是{0}".format(num_global))
      
      
      if __name__ == "__main__":
      
          p1 = Process(target=worker1,args=(3,))
          p2 = Process(target=worker2,args=(4,))
          p1.start()
          p2.start()
          p1.join()
          p2.join()
          print("我还是我",num_global)
      
      
      D:installpython3python.exe D:/pyscript/test/test2.py
      我是worker1进程,我的结果是13
      我是worker2进程,我的结果是14
      我还是我 10
      
      Process finished with exit code 0
      
      


        如果在一个类里面用进程池会是什么效果?你会发现类里面的进程代码没有运行。如下代码大家自行研究!

      # -*- coding: utf-8 -*-
      from multiprocessing import Pool
      
      global_name = "老王"
      
      class MyClass(object):
      
          def my_func(self):
              p_pool = Pool(5)
              for i in range(3):
                  p_pool.apply_async(func=self.my_task, args=(i,))
              p_pool.close()
              p_pool.join()
      
          def my_task(i):
              print(i, global_name)
      
      
      class MyClass2(object):
      
          def my_func(self):
              p_pool = Pool(5)
              for i in range(3):
                  p_pool.apply_async(func=my_task, args=(i,))
              p_pool.close()
              p_pool.join()
      
      # 这个函数是类外面的
      def my_task(i):
              print(i, global_name)
      
      if __name__ == "__main__":
      
          obj = MyClass()
          obj.my_func() # 没有任何输出
          print("以下是MyClass2类")
          obj2 = MyClass2()
          obj2.my_func()
      
      
      D:python3installpython.exe D:/python/py3script/python66.py
      以下是MyClass2类
      0 老王
      1 老王
      2 老王
      
      Process finished with exit code 0
      
      

      文章评论

      多进程修改全局变量及进程池Pool一些坑文章写得不错,值得赞赏
      国产99视频精品免视看6