我正在尝试运行2线程下面交替:
import threading
def test1():
for _ in range(3):
print("Test1")
def test2():
for _ in range(3):
print("Test2")
t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
t1.start()
t2.start()
t1.join()
t2.join()
但是,结果如下所示:
Test1
Test1
Test1
Test2
Test2
Test2
我想要的结果如下所示:
Test1
Test2
Test1
Test2
Test1
Test2
有什么办法可以做到这一点吗?
1条答案
按热度按时间bihw5rsg1#
我想你的问题是关于为什么这两个函数不是同时执行,而是按顺序执行。答案是Python有一个global interpreter lock(GIL)。一个Python进程(通常)不会在多个并行线程中运行Python代码。这是有例外的,比如在运行本地代码时(在这种情况下,GIL可能会被释放)。
当然,在你的小例子中,不需要线程化。在真实的世界中,这个问题实际上不是什么大问题。通常,CPU密集型任务被卸载到本地库(如Pytorch、Numpy、Scipy、Pandas等),所有这些都是用本地代码编写的,或者内置了并行化功能。
如果您发现自己编写的代码可以通过使用多个CPU内核来解释Python代码来解决,那么很可能有更好的解决方案。
也就是说,看看
multiprocessing
模块,它可以通过利用多个进程和并行原语(如queues和map-reduce)并行运行多个Python函数