在 windows 机器上工作时出现多处理问题

Multiprocessing issue when working on windows machine

我有一个简单的多处理任务,用于写入 csv 文件。程序从另一个文件中获取大约 40k 行,处理这些数据并将它们写入另一个文件。我的代码如下所示:

create_queue_infile(csv_file, q, opt)
pool = multiprocessing.Pool(processes=(multiprocessing.cpu_count() - 1))
while not (q.empty()):
    res = pool.apply_async(my_function, args=(q.get(), input2, 5, output,))
pool.close()
pool.join()

写入另一个 csv 文件的部分如下所示:

def write_to_csv(path, csv_row):
    with open(path, 'a', newline='', encoding="utf-8") as f:
        f.write(csv_row)

这在我的 Linux 机器上任何规模都能完美运行。然而,当我想在 Windows 机器上 运行 这个程序时,我的输出文件似乎有一些损坏的行。在尝试写入同一个文件时,似乎进程重叠了。示例输出如下所示:

ROW SOME_INFORMATION
ROW SOME_INFORMATION
ROW SOME_INFORMATION
SOM
ROW SOME_INFORMATION
ROW SOME_INFORMATION
ROW SOME_INFORMATION
FORMATION
ROW SOME_INFORMATION
ROW SOME_INFORMATION

因为我有很多数据,跟踪每一行是不切实际的,所以我试图找出这个问题背后的原因。我真正担心的是为什么这适用于 Linux 而不是 Windows.

由于我还不能评论,我会post我的评论作为答案。

Windows 和 Linux 在 Python 多处理的工作方式方面存在一些重要差异。最大的区别之一是分叉过程和生成过程。如果您在互联网上搜索“python multiprocessing between Windows and Linux”,您将获得多个讨论该主题的博客 post、论坛主题等.

我还鼓励您查看以下 SO 线程:Python multiprocessing safely writing to a file。通常,让多个并发进程同时写入同一个文件不是一个好习惯。 SO线程中给出了一些很好的代码结构示例。