我对 python 多处理模块相当熟悉,但我不确定如何实现这个设置。我的项目有这个基本流程:
请求串行设备 -> 收集响应 -> 解析响应 -> 断言响应 -> 重复
它现在是一个顺序操作,循环它,直到它收集到所需数量的断言响应。我希望通过让“主进程”执行前两个操作来加快这项任务,然后将解析和断言任务传递到工作进程队列中。但是,这仅在主进程始终运行时才有用。我保证在多核机器上工作。
有没有办法让多处理模块中的进程始终保持焦点/运行,这样我就可以实现这一点?
我对 python 多处理模块相当熟悉,但我不确定如何实现这个设置。我的项目有这个基本流程:
请求串行设备 -> 收集响应 -> 解析响应 -> 断言响应 -> 重复
它现在是一个顺序操作,循环它,直到它收集到所需数量的断言响应。我希望通过让“主进程”执行前两个操作来加快这项任务,然后将解析和断言任务传递到工作进程队列中。但是,这仅在主进程始终运行时才有用。我保证在多核机器上工作。
有没有办法让多处理模块中的进程始终保持焦点/运行,这样我就可以实现这一点?
据我所知(假设您没有严格要求主设备始终记录来自串行设备的数据),您只希望主设备准备好向任何工作人员提供大量数据并准备好接收一旦 worj=ker 准备好,来自任何工作人员的数据。
要实现这一点,请使用两个队列和多处理
如果时间(解析数据)>>收集数据,这应该足以满足您的需求
这是实施工作流程的一种方法:
有两个multiprocessing.Queue
对象:tasks_queue和
results_queue。tasks_queue将保存设备输出,results_queue将保存断言的结果。
有一个工作人员池,每个工作人员从 tasks_queue提取设备输出,对其进行解析、断言,并将断言结果放在results_queue上。
让另一个进程不断轮询设备并将设备输出放在tasks_queue上。
让最后一个进程持续轮询results_queue,并在达到所需数量的结果(成功断言)时结束整个程序。
multiprocessing.Process
进程(对象)的总数为 2 + k,其中k是池中的工人数。