问题:由于python使用“ GIL”,python是否能够同时运行其单独的线程?
信息:
看完这篇文章后,我对python是否能够利用多核处理器的不确定性产生了怀疑。尽管python做得很好,但认为它缺乏如此强大的功能实在是很奇怪。因此,我感到不确定,因此决定在这里提问。如果我编写的是多线程程序,它是否可以在多个内核上同时执行?
答案是“是,但是…”
但是当您使用常规线程进行并发时,cPython不能。
您可以使用或之类的东西multiprocessing,celery也mpi4py可以将并行工作拆分为另一个进程。
multiprocessing
celery
mpi4py
或者,您可以使用Jython或IronPython之类的东西来使用没有GIL的替代解释器。
一种较软的解决方案是使用不会在GIL上运行的库来执行繁重的CPU任务,例如numpy可以在不保留GIL的情况下进行繁重的工作,因此可以继续使用其他python线程。您也可以通过ctypes这种方式使用库。
numpy
ctypes
如果您不进行CPU限制工作,则可以完全忽略GIL问题(有点),因为python在等待IO时不会获取GIL。