如何在Python中交替运行多个线程?

w51jfk4q  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(198)

我正在尝试运行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

有什么办法可以做到这一点吗?

bihw5rsg

bihw5rsg1#

我想你的问题是关于为什么这两个函数不是同时执行,而是按顺序执行。答案是Python有一个global interpreter lock(GIL)。一个Python进程(通常)不会在多个并行线程中运行Python代码。这是有例外的,比如在运行本地代码时(在这种情况下,GIL可能会被释放)。
当然,在你的小例子中,不需要线程化。在真实的世界中,这个问题实际上不是什么大问题。通常,CPU密集型任务被卸载到本地库(如Pytorch、Numpy、Scipy、Pandas等),所有这些都是用本地代码编写的,或者内置了并行化功能。
如果您发现自己编写的代码可以通过使用多个CPU内核来解释Python代码来解决,那么很可能有更好的解决方案。
也就是说,看看multiprocessing模块,它可以通过利用多个进程和并行原语(如queues和map-reduce)并行运行多个Python函数

相关问题