1个生产者,1个消费者,只有1个数据要进行通信,排队是否过度杀伤?

时间:2016-04-20 15:13:22

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

此问题与 Python多处理有关。我要求为我的特定场景提供合适的进程间通信数据结构:

我的场景

我有一个制作人和一个消费者。

  1. 制作人每10秒钟生成一个单个相当小的熊猫数据帧,然后制作人将其放在python.multiprocess.queue上。
  2. 消费者是一个每100毫秒python.multiprocess.queue的GUI轮询。消费者捕获生产者生产的每一个DataFrame都是非常关键的。
  3. 我的想法

    python.multiprocess.queue正在服务于此目的(我认为),而且使用起来非常简单! (赞美绿色的slhehereen领主!)。但是 我显然没有利用队列的全部潜力,只有一个生产者一个消费者,最多一个项目在队列上。这让我相信有比队列更简单的事情 。我试图搜索它,我被python 3.5 documentation: 18. Interprocess Communication and Networking中列出的选项所震撼。我也怀疑可能有一种方法根本不需要进程间通信数据结构。

    请注意

    1. 表现不是很重要
    2. 我现在会坚持多处理,而不是多线程。
    3. 我的问题

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

      由于

1 个答案:

答案 0 :(得分:3)

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

  

消费者捕获生产者生产的每一个DataFrame都非常关键。

因此,假设您使用变量来存储DataFrame。生产者将其设置为生产值,消费者只需阅读它。我想这会很好。

但是,如果不知何故消费者被一个以上的生产周期所阻碍,会发生什么?然后在阅读之前会覆盖一些旧值。这就是为什么我认为(线程安全的)队列几乎是“按照定义”的方式。

此外,要注意过早优化。如果它适用于您的情况,非常好。如果有一天,对于其他一些情况,性能成为一个问题,那么你应该花费额外的工作,IMO。