多处理,终止和损坏队列

时间:2012-11-14 10:13:53

标签: python multiprocessing terminate

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

  

Terminate()如果在关联进程使用管道或队列时使用此方法,则管道或队列可能会损坏,并可能被其他进程无法使用。同样,如果进程已获得锁定或信号量等,则终止它可能会导致其他进程死锁。

基本上说,如果你终止使用队列,管道或类似程序的进程,你就会冒结构腐败的风险。

我对此有几个问题,

  1. 如果发生损坏,另一个尝试从PIPE,队列或类似数据中检索数据的进程会发生什么?
  2. 流程如何检查是否存在损坏?
  3. 如果您知道另一个进程已被终止,可以以任何方式解决死锁吗?
  4. 我知道你应该总是尝试不使用终止,但这是针对那种除了这个你不能做任何其他事情的情况

2 个答案:

答案 0 :(得分:3)

您可以将校验和添加到传递的数据块中并检查它们以确认没有发生数据损坏。这是任何具有数据损坏风险的数据通信中的常用技术。您可以查看hashlib,并使用类似md5或crc32校验和的内容。

答案 1 :(得分:1)

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

感谢@MarwanAlsabbagh的建议。