用于多处理同步的类似队列的对象

Posted

技术标签:

【中文标题】用于多处理同步的类似队列的对象【英文标题】:Queue-like object for multiprocessing synchronization 【发布时间】:2020-09-26 19:24:11 【问题描述】:

我有一个使用多处理编写的 Python 程序。我有一个对象需要存在于多个进程中,但我需要所有进程中的所有对象保持同步。我曾想过使用多处理队列让一个进程中的对象向其他进程中的对应对象广播它所做的更改(例如附加到对象上的列表字段),但我不认为队列是最好的处理这种行为的事情,因为每个队列项目应该只被消费一次,但我需要多个对象来消费同一个项目。理想情况下,我也希望在所有消费者都拿走这些物品后,这些物品会自行“消失”。

Python 中是否有预构建的结构来处理这种用例?如果没有,关于如何最有效地实现自己的任何想法?

【问题讨论】:

【参考方案1】:

虽然它没有“消失”位,但它的术语是读写器锁,有a library for it here。

【讨论】:

嗨普特南,感谢您的回复。现在,整个对象被复制到每个新进程中,没有共享内存。出于两个原因,我宁愿避免使用共享内存。首先,据我了解,Python 库需要提前确定的固定位长度,而我非常喜欢动态扩展的灵活性。其次,共享内存增加了开发的复杂性,占用了我的时间(我的时间有限,所以简单性是最重要的)。如果我误解了您的回答,请详细说明。

以上是关于用于多处理同步的类似队列的对象的主要内容,如果未能解决你的问题,请参考以下文章

一个C# (队列多任务+多线程处理)对象的winform demo

IOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步

iOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步

OO面向对象多线程编程作业总结

Linux 工作队列和等待队列的区别

第七天学习多线程同步和锁