gpt4 book ai didi

python - 并行化我的 python 程序

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:01 26 4
gpt4 key购买 nike

我有一个 python 程序,它从输入文件中读取一行,进行一些操作并将其写入输出文件。我有一台四核机器,我想利用所有这些机器。我认为有两种选择可以做到这一点,

  1. 创建n个python进程,每个进程处理总记录数/n
  2. 在单个 python 进程中为每个输入记录创建 n 个线程,每个线程处理一条记录。
  3. 在单个 python 进程中创建一个包含 n 个线程的池,每个线程执行一条输入记录。

我从未使用过 python 多重处理功能,请黑客们告诉我哪种方法是最好的选择?

最佳答案

Python 解释器 (CPython) 的引用实现拥有臭名昭著的 "Global Interpreter Lock" (GIL) ,实际上一次只允许一个线程执行 Python 代码。因此,多线程在 Python 中非常有限——除非你的繁重工作是在发布 GIL 的 C 扩展中完成的。

克服此限制的最简单方法是使用 multiprocessing模块代替。它具有与 threading 类似的 API,并且使用起来非常简单。在你的情况下,你可以像这样使用它(假设操作是困难的部分):

import multiprocessing

def process_line(line):
# This function is executed in your worker processes. Manipulate the
# line and return the results.
return manipulate(line)

if __name__ == '__main__':
with open('input.txt') as fin, open('output.txt', 'w') as fout:
# This creates a pool of N worker processes, where N is the number
# of CPUs in your machine.
pool = multiprocessing.Pool()

# Let the workers do the manipulation and write the results to
# the output file:
for manipulated_line in pool.imap(process_line, fin):
fout.write(manipulated_line)

关于python - 并行化我的 python 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com