• <bdo id='slXaJ'></bdo><ul id='slXaJ'></ul>
    <tfoot id='slXaJ'></tfoot>

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

        Python 多处理如何优雅地退出?

        时间:2023-05-27
        1. <legend id='lVP7q'><style id='lVP7q'><dir id='lVP7q'><q id='lVP7q'></q></dir></style></legend>

                <tfoot id='lVP7q'></tfoot>
                  <tbody id='lVP7q'></tbody>

              1. <small id='lVP7q'></small><noframes id='lVP7q'>

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

                  <bdo id='lVP7q'></bdo><ul id='lVP7q'></ul>
                  本文介绍了Python 多处理如何优雅地退出?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  限时送ChatGPT账号..
                  import multiprocessing
                  import time
                  
                  class testM(multiprocessing.Process):
                  
                      def __init__(self):
                          multiprocessing.Process.__init__(self)
                          self.exit = False
                  
                      def run(self):
                          while not self.exit:
                              pass
                          print "You exited!"
                          return
                  
                      def shutdown(self):
                          self.exit = True
                          print "SHUTDOWN initiated"
                  
                      def dostuff(self):
                          print "haha", self.exit
                  
                  
                  a = testM()
                  a.start()
                  time.sleep(3)
                  a.shutdown()
                  time.sleep(3)
                  print a.is_alive()
                  a.dostuff()
                  exit()
                  

                  我只是想知道为什么上面的代码并没有真正打印你退出".我究竟做错了什么?如果是这样,有人可以指出正确退出的正确方法吗?(我不是指 process.terminate 或 kill)

                  I am just wondering how come the code above doesn't really print "you exited". What am I doing wrong? if so, may someone point me out the correct way to exit gracefully? (I am not referring to process.terminate or kill)

                  推荐答案

                  您没有看到这种情况发生的原因是因为您没有与子进程通信.您正在尝试使用局部变量(父进程的本地变量)向子进程发出它应该关闭的信号.

                  The reason you are not seeing this happen is because you are not communicating with the subprocess. You are trying to use a local variable (local to the parent process) to signal to the child that it should shutdown.

                  查看有关同步原语的信息.您需要设置可以在两个进程中引用的某种信号.一旦你有了这个,你应该能够在父进程中轻按开关并等待子进程死亡.

                  Take a look at the information on synchonization primatives. You need to setup a signal of some sort that can be referenced in both processes. Once you have this you should be able to flick the switch in the parent process and wait for the child to die.

                  试试下面的代码:

                  import multiprocessing
                  import time
                  
                  class MyProcess(multiprocessing.Process):
                  
                      def __init__(self, ):
                          multiprocessing.Process.__init__(self)
                          self.exit = multiprocessing.Event()
                  
                      def run(self):
                          while not self.exit.is_set():
                              pass
                          print "You exited!"
                  
                      def shutdown(self):
                          print "Shutdown initiated"
                          self.exit.set()
                  
                  
                  if __name__ == "__main__":
                      process = MyProcess()
                      process.start()
                      print "Waiting for a while"
                      time.sleep(3)
                      process.shutdown()
                      time.sleep(3)
                      print "Child process state: %d" % process.is_alive()
                  

                  这篇关于Python 多处理如何优雅地退出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:我在做什么的 Python 多处理进程或池? 下一篇:我可以在 python 中创建共享的多数组或列表对象列

                  相关文章

                  最新文章

                    <bdo id='qgj6X'></bdo><ul id='qgj6X'></ul>
                • <small id='qgj6X'></small><noframes id='qgj6X'>

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