最近研究人脸匹配,在人脸匹配过程中,由于摄像头输入的人脸要与数据库中的人脸比较,但由于数据库中的人过多,逐一匹配速度可能会降低,故选用双线程实现匹配加速,本文主要就python如何使用双线程进行记录。 由于Python的解释器CPython的原因,Python并不能使用双线程。因为CPython存在GIL锁,具体原因:
因为Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。 摘自http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832360548a6491f20c62d427287739fcfa5d5be1f000(侵权删)
故只能使用单核运行,而我的机器是单核双线程。故使用单核上的两个线程去完成任务。 至于为何能使用单核双线程,也在摸索中。