gpt4 book ai didi

python - 使用多线程使用python3处理文件

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:38 24 4
gpt4 key购买 nike

我正在尝试使用我的 CPU 的单核处理一个文件。但我想使用单核是不够的。相反,如果我可以访问我系统的多个核心,那么我可以使进程运行得更好更快。

但不幸的是,我知道只能使用单核处理文件。这是我所做的:

data = open('datafile','r',encoding='ascii',errors='ignore')
for line in data.readlines():
splitted = line.lower().strip().split()
check = process(splitted[0],splitted[1])
if check == '':
pass
data.close()

我想知道如何使用 CPU 的全部容量来处理 process(),同时单独获取 line 并获得所需的输出?甚至我如何在处理时避免线程的死锁状态,因为这对进程输出来说可能是危险的。

请与我分享您的观点。

最佳答案

首先:您需要多个进程来利用多个内核。不是线程。这是 GIL 的限制。

下面是一个示例,说明如何使用 multiprocessing.Pool 实现它:

from multiprocessing import Pool, cpu_count

def process(arg1, arg2):
...

workers_count = 2*cpu_count()+1 # or whatever you need
pool = Pool(processes=workers_count)

with open('datafile','r',encoding='ascii',errors='ignore') as fo:
buffer = []
for line in fo:
splitted = line.lower().strip().split()
buffer.append((splitted[0], splitted[1]))
if len(buffer) == workers_count:
results = pool.map(process, buffer)
buffer = []
# do something with results
if buffer:
results = pool.map(process, buffer)
# do something with results again

所以它的作用是逐行读取文件,一旦收集到足够的数据,它就会将其发送到多进程池并等待并行处理。请注意,除非您有 SSD,否则并行运行磁盘 io 只会降低性能(而且并行化逐行读取也不是微不足道的)。

但您必须注意的是,由于使用了多个进程,因此您不能在它们之间共享内存,即 process 函数不应读取/写入全局变量。

关于python - 使用多线程使用python3处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46073712/

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