为什么multiprocessing.Queue的延迟很短,而multiprocessing.Pipe却​​没有?

时间:2019-02-01 07:04:24

标签: python python-3.x python-multiprocessing

multiprocessing.Queue的文档指出,从排队入项到将其腌制的表示形式刷新到基础Pipe之间存在一些延迟。显然,尽管您可以将一个项目直接放入Pipe中(它没有其他说明,但实际上是这样)。

为什么管道不需要-或具有-相同的后台线程来进行酸洗?并且是与multiprocessor.SyncManager.Queue通话时没有类似延迟的同样原因吗?

(奖金问题:当文档说“将对象放在空队列中之后,可能会有 infinitesimal 延迟...”,这是什么意思?我进行了微积分;我知道 infinitesimal 是什么意思,而这个意思似乎不适合这里。那么,这是什么意思?)

1 个答案:

答案 0 :(得分:1)

如果您写入Pipe,则 current 线程会阻塞,直到写入完成。因此,没有延迟(或者调用线程看不到任何延迟),但是可以死锁Pipe是比Queue低的工具。

SyncManager.Queue的情况很简单,即所有对管理器的请求都已同步,因此,推送对象的过程无法观察到该对象仍然为空(缺少弹出)。

同时,“无穷小”延迟仅意味着线程调度延迟,而不是(可能更长)写入整个对象的时间:启动足以确定该对象Queue不为空。尽管如此,推动线程仍可以赢得比赛,并观察到它仍然缺少“已被推动”的对象。

相关问题