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

Python多处理优雅地退出如何?,python,multiprocessing,Python,Multiprocessing,我只是想知道为什么上面的代码没有真正打印“你退出了”。我做错了什么?如果是这样的话,有人能给我指出正确的退出方式吗?(我不是指process.terminate或kill)您没有看到这种情况发生的原因是您没有与子流程通信。您正试图使用局部变量(父进程的局部变量)向子进程发出应该关闭的信号 请看一下有关的信息。您需要设置一个可以在两个进程中引用的某种信号。一旦你有了这个,你应该能够在父进程中轻弹开关,等待子进程死亡 请尝试以下代码: import multiprocessing import ti

我只是想知道为什么上面的代码没有真正打印“你退出了”。我做错了什么?如果是这样的话,有人能给我指出正确的退出方式吗?(我不是指process.terminate或kill)

您没有看到这种情况发生的原因是您没有与子流程通信。您正试图使用局部变量(父进程的局部变量)向子进程发出应该关闭的信号

请看一下有关的信息。您需要设置一个可以在两个进程中引用的某种信号。一旦你有了这个,你应该能够在父进程中轻弹开关,等待子进程死亡

请尝试以下代码:

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()

实际上,所有这些代码都应该给您一个名称错误,因为您试图在类创建期间实例化该类。换句话说:您可能想删除最后八行。注意:此示例代码在win32上会失败,因为您没有使用一个保护子句保护主脚本代码:`if name==“main”:…thx man,我只是在查找API的值,我认为它是不可变的。这将在我的应用程序中非常有效。Thx a Lotin在调用shutdown后等待3秒(如果关机时间超过3秒该怎么办),您可以在进程完成时加入进程以退出->进程。join()我只是按照他最初的示例:我根本不会等待!(我会照你的建议去做)。
shutdown()
不再是
过程的方法。正确的方法是立即终止()。
def\uuu init\uuuu(self),:
中的逗号有什么意义吗?
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()