使用 multprocessing.Pipe 进行阻塞,直到事件发生(超时)

Posted

技术标签:

【中文标题】使用 multprocessing.Pipe 进行阻塞,直到事件发生(超时)【英文标题】:Using multprocessing.Pipe for blocking until event occurs (with timeout) 【发布时间】:2013-11-16 19:01:41 【问题描述】:

我在一个相当简单的脚本中使用multprocessing.Pipe,该脚本有 2 个进程,A 从外部源(连接到串行端口的 Arduino)读取数据并发送B 和事件。这样我可以让 B 阻塞,直到它收到来自 A 的一个特定事件,但是外部来源是有时甚至无法非常可靠地检测到(大约 75% 可靠)。所以我想围绕这个事件实现一个超时,但是我想删除一个已经超时的错误,但没有什么能阻止它发生

有没有更好的抽象可以用于此目的?我想做的一件事是b.recv(timeout=N),由于某种原因,multiprocess.Pipe 目前无法实现。

【问题讨论】:

【参考方案1】:

您可以使用Connection 的poll method;它有一个超时参数:

receiver, sender = mp.Pipe()
...
if receiver.poll(timeout):
    data = receiver.recv()

【讨论】:

以上是关于使用 multprocessing.Pipe 进行阻塞,直到事件发生(超时)的主要内容,如果未能解决你的问题,请参考以下文章

AES GCM 使用 web 微妙加密进行加密并使用颤振加密进行解密

如何使用STM32提供的DSP库进行FFT

使用 C++ 原子库,我应该使用啥内存顺序进行加载,然后进行比较交换?

为啥要使用 toString() 对可以使用 typeof 进行检查的参数进行类型检查?

使用计算机视觉进行产品检测 - 使用 opencv 进行边缘检测

使用 PyCrypto 进行 AES 加密并使用 mcrypt 进行解密