如何让多个python程序将行附加到同一个文件中?

如何让多个python程序将行附加到同一个文件中?,python,concurrency,Python,Concurrency,我有多个python进程,通常每个核心1个,它们转换大量数据,每个数据都从专用源读取,并写入单个输出文件,每个输出文件都以追加模式打开 这是这些程序运行的安全方式吗 由于严格的性能要求和大数据量,我认为我不能让每个进程重复打开和关闭文件。另一种选择是,每次写入一个专用的输出文件后,由一个进程将它们连接在一起。但我宁愿避免这样 提前感谢您提供的所有答案和建议。您是否考虑过使用该模块以类似线程的方式协调正在运行的程序?请特别参阅队列接口;完成后,您可以将每个完成的工作项放在队列中,并让一个进程从队列

我有多个python进程,通常每个核心1个,它们转换大量数据,每个数据都从专用源读取,并写入单个输出文件,每个输出文件都以追加模式打开

这是这些程序运行的安全方式吗

由于严格的性能要求和大数据量,我认为我不能让每个进程重复打开和关闭文件。另一种选择是,每次写入一个专用的输出文件后,由一个进程将它们连接在一起。但我宁愿避免这样


提前感谢您提供的所有答案和建议。

您是否考虑过使用该模块以类似线程的方式协调正在运行的程序?请特别参阅队列接口;完成后,您可以将每个完成的工作项放在队列中,并让一个进程从队列中读取并写入输出文件

或者,您可以让每个子流程维护到父流程的单独管道,父流程从所有子流程执行select调用,并在适当时将数据复制到输出文件。当然,这可以不用多处理模块也可以用它手动完成


另一方面,如果您避免线程的原因是为了避免全局解释器锁,那么您可以考虑一个非CPython实现,例如Jython或IrPython。< /P> < P>您的程序是安全的,因为不会导致崩溃,但是来自不同进程的非常不幸的定时数据会被混淆。进程1追加了一长串as,进程2追加了一长串b,您可能会在文件中出现大量as,然后是bs,然后是更多as或其他组合/混合


问题是,对于足够长的字符串参数,.write不能保证是原子的。如果参数的边界很紧,小于fs/os的块大小,那么您可能很幸运。否则,请尝试使用日志模块,它确实采取了更多的预防措施,但这些预防措施可能会减慢您的速度。。。您需要准确地进行基准测试,因为它针对的是经常被多个程序附加到的日志文件。

假设有8个进程,每个进程都将250000个100字节的记录写入一个文件并进行排序并不重要-这是使用命名管道的最简单方法?@KenFar-每个进程都有一个命名管道到一个进程,该进程一次只从这些管道读取一条记录,使用select调用找出哪些管道可以立即读取并写入单个输出文件。使用管道的最简单方法是使用多处理模块,让它自动为您设置管道。使用命名管道可能是不必要的复杂性;如果所有这些过程都是由单亲启动的,那就没有意义了。