2012-06-08 38 views
0

注意:我对这个主题的教育缺乏,所以我可能会做出一些天真的假设。使用GIL作为线程池

假设您有一个功能执行阻塞I/O。你需要运行这个函数n次。

如果你只是产生n个线程(使用线程模块)并且同时启动它们,它是否可以简单地使用GIL来管理线程(基于I/O),而不是使用multiprocessing.pool模块来管理子进程?

回答

4

将实现细节用作代码的核心功能是不好的做法。 GIL是CPython的实现细节,并不存在于other implementations中。

使用旨在做你想做的事情。

+1

当然。这更像是一个学术问题而非实际问题 – pdeuchler

+0

@pdeuchler无论如何,如果你想得到一个理论上的答案,请随时不要接受这个问题 - 我相信别人会一起来讨论这种方法在理论上是多么可行,但我会留下这些,因为这实际上是对这个问题的实际答案 - 这真的是这里提供的。 –

0

GIL在这里甚至相关吗?你期望从中得到什么?

你可以产生n个线程,并让它们全部执行阻塞I/O,没有GIL。

如果你想“管理”线程 - 例如,加入全部,所以你知道什么时候完成 - 你仍然需要明确地做到这一点; GIL没有帮助。

+0

这实在比评论更多的评论。 –