python - Python3 进程未在 sys.exit() 上关闭
问题描述
所以我正在做一个项目,现在在 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()
解决方案
我认为这是因为您正在从进程调用 sys.exit() 。这只会终止当前进程,而不是父进程。一个非常混乱的方法是os._exit(1)
在流程中使用,但这很危险,所以我不推荐它。
该线程可能对您有所帮助: 如何从 Python 线程中退出整个应用程序?
推荐阅读
- sql - 同一查询中的 CTE 和 @table
- apache - netstat 命令(net-tools)未生成预期响应
- azure-iot-hub - 在部署中继承孪生设置 - Azure IoT Edge
- javascript - 我想用 javascript 测试 YouTube 视频的长度
- real-time-clock - 有没有办法在“CODESYS Control for Linux SL”中获得纳秒精度的 RTC 时钟
- java - java.io.FileNotFoundException:/sdcard/testwrite.txt:打开失败:EACCES(权限被拒绝)
- python - 我得到 BrokenPipeError: [Errno 32] Broken pipe error in python
- java - 通过 AsyncTask 中的 ID 获取 ChampionName
- java - 我可以在 jar 文件中设置新的 config.properties 文件吗?
- javascript - Firebase SDK 与 Rest API