Python 为什么';当使用多个线程时,这个程序是否运行得更快?

Python 为什么';当使用多个线程时,这个程序是否运行得更快?,python,multithreading,Python,Multithreading,这个代码几乎花费了“0.007”的时间,它首先读取(I)循环,然后当它完成时开始读取(O)循环 我的问题是这个代码: start = time.time() for i in range (260): if i==259: print ("a done\n") break for o in range (260): if o==259: print ("b done\n")

这个代码几乎花费了“0.007”的时间,它首先读取(I)循环,然后当它完成时开始读取(O)循环

我的问题是这个代码:

start = time.time()
for i in range (260):
        if i==259:
            print ("a done\n")
            break
for o in range (260):
        if o==259:
            print ("b done\n")
            break 
end = time.time() 
print (end-start) 
即使这段代码同时读取(I)循环和(O)循环,但仍然需要“0.008”

我认为第二个代码应该占用第一个代码的一半时间,但我不明白为什么它占用的时间与第一个代码几乎相同?

这是由于。I/O和C扩展在GIL之外,但是纯Python工作的线程实际上并不并行工作

如果您确实希望并行执行Python代码,请参阅。它有一个类似于线程的API(以及新的功能)

这是由于。I/O和C扩展在GIL之外,但是纯Python工作的线程实际上并不并行工作

如果您确实希望并行执行Python代码,请参阅。它有一个类似于线程的API(以及新的功能)


CPython使用一个全局解释器锁(GIL),一次只允许运行一个线程。这使得它的内存管理器运行得更快,而以牺牲全多线程为代价。在您的情况下,只有一个线程可以同时运行。为了给您一些词汇,以供将来参考,您在这里发现的是Python线程使您并发但不是并行。还应该考虑到即使没有全局解释器也会锁定线程创建的开销,计划和拆卸会增加开销。这对于运行时间如此短的程序来说是显而易见的,并且不会提供2倍的加速。CPython使用一个全局解释器锁(GIL),一次只允许运行一个线程。这使得它的内存管理器运行得更快,而以牺牲全多线程为代价。在您的情况下,只有一个线程可以同时运行。为了给您一些词汇,以供将来参考,您在这里发现的是Python线程使您并发但不是并行。还应该考虑到即使没有全局解释器也会锁定线程创建的开销,计划和拆卸会增加开销。这对于如此短时间运行的程序来说是显而易见的,并且不会提供2倍的加速。由于某些原因,我不能使用多处理模块,我不知道为什么你可以看到我的另一个问题,问为什么多处理不适合我,没有人回答我是的,那么你还有其他模块我可以尝试吗你的另一个问题得到了回答?您从未加入该进程,因此在主程序退出时该进程尚未完成。@uuuu name\uuuuuu==“\uuuu main\uuuu”?你在windows上吗?是的,我也尝试过加入,但没有太多效果。我正在使用python 3.5.2。由于某些原因,我无法使用多处理模块。我不知道为什么你会看到我的另一个问题,问为什么多处理不适合我,而且没有人回答我。那么你还有其他模块我可以尝试吗还有其他问题吗?您从未加入该进程,因此在主程序退出时该进程尚未完成。@uuuu name\uuuuuu==“\uuuu main\uuuu”?你在windows上吗?是的,我也尝试加入,但没有太多工作。我正在使用python 3.5.2
start = time.time()
def a():
    for i in range (260):
        if i==259:
            print (" a done \n")
            break
def b():
    for o in range (260):
        if o==259:
            print (" b done \n")
            break
th1=Thread(target=a)
th2=Thread(target=b)
th1.start()
th2.start()
th1.join()
th2.join()
end = time.time() 
print (end-start)
from multiprocessing import Process
p1 = Process(target=a)
p2 = Process(target=b)
p1.start()
p2.start()
p1.join()
p2.join()