- python/
- Python 如何实时将多处理事件列表从父进程同步到子进程?
Python 如何实时将多处理事件列表从父进程同步到子进程?
Python 如何实时将多处理事件列表从父进程同步到子进程?,python,multiprocessing,replay,Python,Multiprocessing,Replay,我需要检索和重放包含来自不同进程的事务的跟踪文件(python)。我们必须在跟踪文件中模拟原始场景,因此我们首先将跟踪文件分成不同的部分,每个部分只包含单个进程中的事务,并并行地重放它们。此外,为了保持原始跟踪中反映的不同进程事务的相同顺序,在每个片段的特定点插入一系列多处理事件原语以进行进程间同步
我们的程序主要异步处理两个步骤,检索和重放。由于跟踪文件非常大,我们将逐块处理它:
主(父)进程逐块检索跟踪文件。对于每个块,将生成不同的块,并插入多处理。事件原语,以便在稍后的重播中进行进程间同步
我需要检索和重放包含来自不同进程的事务的跟踪文件(python)。我们必须在跟踪文件中模拟原始场景,因此我们首先将跟踪文件分成不同的部分,每个部分只包含单个进程中的事务,并并行地重放它们。此外,为了保持原始跟踪中反映的不同进程事务的相同顺序,在每个片段的特定点插入一系列多处理事件原语以进行进程间同步
我们的程序主要异步处理两个步骤,检索和重放。由于跟踪文件非常大,我们将逐块处理它:
主(父)进程逐块检索跟踪文件。对于每个块,将生成不同的块,并插入多处理。事件原语,以便在稍后的重播中进行进程间同步。主进程维护一个Event()列表,每当检测到一个进程交织的点时,该列表通过eventList.append(Event())递增,这个新追加的事件()将被eventList[i].set和eventList[i].wait对引用,这两个对插入到两个特定点。一旦第一个区块被处理,子进程就会产生,并且片段将被分配到相应的子进程以进行重放。稍后检索到的块将被抛出到相应子级的队列中
子进程在父进程检索到第一个块后生成。每个子进程都会重放一个包含来自同一进程的事务的单件
这里的问题是,子进程是在检索到第一个区块之后生成的,因此此时的事件列表将复制到子进程,同步重放第一个区块是可以的,但主进程现在继续处理第二个区块,子进程不会实现为第二个区块增加的事件列表,,当稍后重放第二个区块时,程序会失败
我意识到multiprocessing.Manager支持列表可以在不同进程之间共享内存,但该列表似乎不能容纳Event()。将事件()附加到Manager().list()时,会弹出异常“RuntimeError:仅应通过继承在进程之间共享信号量对象”。我还尝试在需要时自动生成新变量eventXX=Manager().Event(),但似乎这会导致性能急剧下降
有人知道如何使子进程实现这样的多处理。父进程中的事件列表更改?或者你有没有其他方法来实现这一点
提前谢谢