【问题标题】:Python3 process not closing on sys.exit()Python3 进程未在 sys.exit() 上关闭
【发布时间】:2020-10-19 12:42:51
【问题描述】:

所以我正在做一个项目,现在在 python2 中,以下代码可以正常工作。但我想升级到 python3,因为不再支持 python2。 所以在pin_event_down函数一个进程中,备份就开始了。备份进程和函数正在启动一些数据记录线程,然后它应该被关闭/杀死。在 python2 中, sys.exit() 工作正常,当阅读 python 文档时,他们说你应该使用 system.exit() 有没有人知道为什么这个过程永远不会结束?此外,每次特定引脚关闭时,它都会再次使用相同的 RAM 内存创建进程,从而用双倍的 1 个进程填充 ram。

    def pin_event_down(self):
    """
    This function is used to create a product pin event.
    @return: None.
    """
        #do some stuff
        Process(target=self.backUp).start()
        #do some stuff

    def backUp(self):
    """
    This function is used to create a backup feedback log.
    @return: None.
    """
        if product is not None:
            self.logger.__init__()
            self.logger.start()
            #do some stuff
        sys.exit()

【问题讨论】:

  • 分叉进程是否收到pin_event_down 调用,或者您是否采取措施防止这种情况发生?
  • @Thomas 不,他们应该是独立的。事件管理器是从一开始就启动的,我不相信他对流程备份有了解。 eventmanger 只处理 google api 事件。

标签: python multithreading memory process sys


【解决方案1】:

我认为这是因为您正在从进程调用 sys.exit()。这只会终止当前进程,而不是父进程。一个非常混乱的方法是在进程中使用os._exit(1),但这很危险,所以我不推荐它。

本帖可能对您有所帮助: How to exit the entire application from a Python thread?

【讨论】:

  • 所以我只是尝试了 os._exit(1) ,这似乎有效。但是既然大家都说这样不好,那还有什么办法呢?另外,我只想杀死 1 个单一进程:进程备份。这似乎与 os._exit(1) 一起工作,因为只有该进程停止运行
  • 如果我理解正确,您只希望杀死一个进程。既然它是一个进程,你可以让它返回吗?您还可以将进程分配给变量 p,然后调用 p.join() 以终止进程。相当肯定调用 join() 是一个阻塞调用,这可能不是你想要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多