python多线程因为GIL锁的原因可以说是假的,但是多进程是可以使用多核 cpu。
测试代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from threading import Thread def loop1(): a = 0 while 1: a += 1 def loop2(a): while 1: a += 1 for i in range(3): t = Thread(target=loop1()) t.start() for i in range(3): t = Thread(target=loop2(), args=(1,)) t.start() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
from multiprocessing import Process, Pool def loop1(): a = 0 while 1: a += 1 def loop2(a): while 1: a += 1 pool = Pool(processes=6) for i in range(3): pool.apply_async(loop1) for i in range(3): pool.apply_async(loop2, args=(1,)) pool.close() pool.join() |
测试结果如下:
结果:我们可以看到 threading 多线程库只可以跑满一核 cpu,但是 multiprocessing 多进程库可以跑满 cpu