当不同的进程不通信时,是不是应该将不同的 multiprocessing.Queue 对象用于不同的进程?

Posted

技术标签:

【中文标题】当不同的进程不通信时,是不是应该将不同的 multiprocessing.Queue 对象用于不同的进程?【英文标题】:Should different multiprocessing.Queue objects be used for different processes when they do not communicate?当不同的进程不通信时,是否应该将不同的 multiprocessing.Queue 对象用于不同的进程? 【发布时间】:2020-07-31 20:25:41 【问题描述】:

我是多处理的新手,这是我程序中的示例代码,我想知道这是否是最佳实践。

我设置了两个不相互通信的进程,但我传递了相同的multiprocess.Queue() 对象来接收它们的输出。下面的代码示例:

"""Setting up multi-processing"""
    que = Queue()
    processes_list = list()
    process1 = Process(target=lambda q, arg1, arg2, arg3, arg4: q.put(readScope(arg1, arg2, arg3, arg4)),
                      args=(que, scope, numCollects, numChan, startTimeVoltage,))
    processes_list.append(process1)
    process2 = Process(target=lambda q, arg1, arg2, arg3: q.put(readOpsens(arg1, arg2, arg3)),
                      args=(que, ser, ntimes, startTimeOpsens,))
    processes_list.append(process2)

    for process in processes_list:
        process.start()

    for process in processes_list:
        process.join()

    """Data manipulation"""
    voltageData = que.get()
    tempData = que.get()

这是好的做法吗?

【问题讨论】:

【参考方案1】:

这些看跌期权可以以任何顺序发生。电压数据有可能最终出现在温度数据变量中,而温度数据​​最终出现在电压数据变量中。因此,如果您想确保获得第一个进程的输出,然后是第二个进程的输出,要么标记和排序,要么使用两个队列。

【讨论】:

以上是关于当不同的进程不通信时,是不是应该将不同的 multiprocessing.Queue 对象用于不同的进程?的主要内容,如果未能解决你的问题,请参考以下文章

安卓多线程间通信和多进程之间通信有什么不同?分别怎么实现?

linux 进程间通信的3种高级方式及优缺点

NO1

几种常用的进程间通信的方式,通信特点和通信方式的优缺点

使用 MPI 终止所有进程

线程和进程的不同信号处理程序?是不是可以