我读过,在C,实施一定的Python函数,我假定包括file.read(),可以释放GIL,当他们工作,然后拿回来上完成通过这样做可以使用多个内核。file.read()多和GIL
我正在使用多进程来并行化一些代码,目前我有三个进程,父进程,从文件读取数据的一个子进程,以及从第一个传递给它的数据生成校验和的一个子进程子进程。
现在,如果我理解这个权利,似乎创造一个新的进程来读,因为我目前做的是uneccessary的文件,我应该把它的主要工序。问题是我是否理解这一权利,并且在主流程中还是单独保存的情况下,我是否会获得更好的性能?
所以给我的函数读取和管道的数据进行处理:
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)
任何见解有人有哪个人会是将不胜感激更快,是因为什么原因!
你为什么不试试,这是更快,并在主进程中读取时是否使用多核心? – bpgergo
你将不得不实际创建一个线程。只是调用''read(* args)''将不会执行任何线程(对不起,如果你知道这一点,在你的问题上有点不清楚)。 –
@Jonas这是我的理解;没有显式创建线程意味着没有创建线程......但是我所做的研究使我相信CPython在某些情况下可以创建自己的线程来执行低级别的事情,尽管它们不会暴露给API。我不禁感到我误解了某个地方的某些东西,这就是为什么我有兴趣获得更好的理解。 – redrah