6

在查看 python 文档时,multiprocessing.terminate()我遇到了以下内容:

Terminate() 如果在相关进程正在使用管道或队列时使用此方法,则管道或队列可能会损坏并且可能无法被其他进程使用。类似地,如果进程获得了锁或信号量等,那么终止它很可能导致其他进程死锁。

这基本上说,如果您终止使用队列、管道或类似的进程,您将面临结构损坏的风险。

我对此有几个问题,

  1. 如果发生损坏,尝试从 PIPE、队列或类似物中检索数据的另一个进程会发生什么情况?
  2. 进程如何检查是否存在损坏?
  3. 如果您知道另一个进程已终止,是否可以以任何方式解决死锁?

我了解您应该始终尝试不使用终止,但这是针对您无法执行任何其他操作的情况

4

2 回答 2

3

您可以向传递的数据块添加校验和,并检查它们以确认没有发生数据损坏。这是存在数据损坏风险的任何数据通信中的常用技术。您可以为此查看hashlib并使用 md5 或 crc32 校验和之类的东西。

于 2012-11-14T10:29:02.503 回答
1

好的,所以这不是最好的解决方案,但我首先尽可能地处理了异常。我不想冒损坏的风险,所以我现在在可能发生损坏的情况下重新启动应用程序,以减少可能出现问题的机会。

感谢@MarwanAlsabbagh 的建议。

于 2012-12-19T11:11:02.067 回答