从以下文档中threading
:
如果您知道所调用的函数基于已编译的扩展,该扩展会在大多数计算过程中释放Python全局解释器锁(GIL)…
问题在于,在这种情况下,您不知道这一点。Python本身仅允许一次运行一个线程(python解释器每次执行python操作时都会锁定GIL)。
threading
仅当myfun()
大部分时间都用在已编译的Python扩展程序中 并且该扩展程序释放GIL 时,它才有用。
该Parallel
代码之所以令人尴尬地缓慢,是因为您正在做大量工作来创建多个线程-然后您一次只能执行一个线程。
如果使用multiprocessing
后端,则必须将输入数据复制到四个或八个进程中的每个进程中(每个内核一个),在每个进程中进行处理,然后再将输出数据复制回去。复制将会很慢,但是如果处理比仅仅计算一个平方稍微复杂一点,那可能是值得的。测量并查看。