Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何实时将多处理事件列表从父进程同步到子进程?_Python_Multiprocessing_Replay - Fatal编程技术网

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(),但似乎这会导致性能急剧下降

    有人知道如何使子进程实现这样的多处理。父进程中的事件列表更改?或者你有没有其他方法来实现这一点

    提前谢谢