我已经读过用 C 实现的某些 Python 函数,我假设它们包括 file.read(),可以在它们工作时释放 GIL,然后在完成时将其恢复,这样做可以利用多个内核,如果它们'重新可用。
我正在使用多进程来并行化一些代码,目前我有三个进程,父进程,一个从文件读取数据的子进程,以及一个从第一个子进程传递给它的数据生成校验和的子进程。
现在,如果我理解这一点,似乎创建一个新进程来读取文件就像我目前正在做的那样是不必要的,我应该在主进程中调用它。问题是我是否理解这一点,我是否会在主进程或单独的进程中保持读取以获得更好的性能?
因此,鉴于我的功能是读取和管道要处理的数据:
def read(file_path, pipe_out):
with open(file_path, 'rb') as file_:
while True:
block = file_.read(block_size)
if not block:
break
pipe_out.send(block)
pipe_out.close()
我认为这肯定会使用多个内核,但也会引入一些开销:
multiprocess.Process(target=read, args).start()
但现在我想知道这样做是否也会使用多个内核,减去开销:
read(*args)
任何人对哪个更快以及出于什么原因的任何见解将不胜感激!