bash 从多线程追加文件
bash append file from multiple thread
我正在处理大数据,我正在尝试并行化我的流程功能。
我可以使用多个线程并处理每个用户是一个不同的线程(我有 20 万个用户)。
每个线程都应附加文件的前 n
行,这些行在所有线程之间共享的输出文件中生成。
我写了一个 Java 程序执行 head -n 256 thread_processed.txt >> output
(每个线程都会这样做)
我需要以原子方式写入输出文件。
如果线程 A 写入了从 0 到 9 的行,而线程 B 写入了从 10 到 19 的行,则输出应该是:[0...9 10... 19]
。线条不能重叠,不能是[0 1 2 17 18 3 4 ...]
如何在 bash 脚本中管理对输出文件的并发写入访问?
sem
来自 GNU Parallel 应该可以做到:
sem --id mylock "head -n 256 thread_processed.txt >> output"
它将启动一个名为 mylock 的互斥锁。
如果您担心有人可能会阅读 output
而 head
是 运行:
sem --id mylock "cp output o2; head -n 256 thread_processed.txt >> o2; mv o2 output"
我正在处理大数据,我正在尝试并行化我的流程功能。 我可以使用多个线程并处理每个用户是一个不同的线程(我有 20 万个用户)。
每个线程都应附加文件的前 n
行,这些行在所有线程之间共享的输出文件中生成。
我写了一个 Java 程序执行 head -n 256 thread_processed.txt >> output
(每个线程都会这样做)
我需要以原子方式写入输出文件。
如果线程 A 写入了从 0 到 9 的行,而线程 B 写入了从 10 到 19 的行,则输出应该是:[0...9 10... 19]
。线条不能重叠,不能是[0 1 2 17 18 3 4 ...]
如何在 bash 脚本中管理对输出文件的并发写入访问?
sem
来自 GNU Parallel 应该可以做到:
sem --id mylock "head -n 256 thread_processed.txt >> output"
它将启动一个名为 mylock 的互斥锁。
如果您担心有人可能会阅读 output
而 head
是 运行:
sem --id mylock "cp output o2; head -n 256 thread_processed.txt >> o2; mv o2 output"