1个生产者,1个消费者,只有1条数据要通信,队列是不是有点大材小用了?

1 producer, 1 consumer, only 1 piece of data to communicate, is queue an overkill?

这个问题与Python多处理有关。我正在为我的特定场景寻求合适的进程间通信数据结构:

我的场景

我有一个生产者和一个消费者。

  1. 生产者每 10 秒生成一个 单个 相当小的熊猫数据帧,然后生产者将其放在 python.multiprocess.queue.
  2. 消费者是一个 GUI 轮询 python.multiprocess.queue 每 100 毫秒。消费者捕获生产者生成的每个 DataFrame 是非常重要的。

我的想法

python.multiprocess.queue 达到了目的(我认为),而且使用起来非常简单! (赞美绿色的 slithereen 领主!)。但是 我显然没有充分利用队列的全部潜力,只有一个生产者一个消费者,队列中最多只有一个项目。这让我相信有比队列更简单的东西。我试图搜索它,但被列在以下选项中的选项淹没了:python 3.5 documentation: 18. Interprocess Communication and Networking。我还怀疑可能有一种方法根本不涉及我需要的进程间通信数据结构。

请注意

  1. 性能不是很重要
  2. 我现在会坚持使用多处理,而不是多线程。

我的问题

我应该满足于排队吗?还是有更推荐的方法?我不是专业的程序员,所以我坚持以久经考验的方式做事。 我也欢迎任何关于解决我的问题的替代方法的建议。

谢谢

对我来说,你提到的最重要的事情是:

It is VERY CRITICAL that the consumer catches every single DataFrame the producer produces.

那么,假设您使用 变量 来存储 DataFrame。生产者会将其设置为生产值,而消费者只需读取它即可。我想那会很好用。

但是,如果消费者以某种方式被多个生产周期阻塞,会发生什么情况?然后一些旧值会在读取之前被覆盖。这就是为什么我认为(线程安全的)队列几乎是 "by definition".

的方式

此外,提防过早优化。如果它适用于您的情况,那就太好了。如果有一天,在其他情况下,性能出现问题,那么你应该花费额外的工作,IMO。