为什么这个python多线程方法比单个线程花费更多时间来解决相同的任务?

时间:2015-08-16 20:56:50

标签: python multithreading process

为什么这个python多线程方法比单个线程花费更多时间来解决同样的问题?

请注意,我的电脑是多核处理器cpu。

我用两种方式编写相同的代码并进行比较。令人惊讶的是单线程方式更快!有人有什么想法吗?

#!/usr/bin/python

L = [1,2,3,4,5,7,8,9,10]

def gen(index,value):
    if index==len(L):
        return 1
    count=0
    for i in range(len(value)+1):
        count+=gen(index+1,value[:i]+[L[index]]+value[i:])
    return count


#Single thread approach
print gen(1,[1]) #this takes 480ms to run!



#Multi-thread approach
from threading import Thread
def t1_start():
    global pointer1
    pointer1=gen(2,[2,1])

def t2_start():
    global pointer2
    pointer1=gen(2,[1,2])

pointer1=0
pointer2=0
t1=Thread(target=t1_start,args=())
t2=Thread(target=t2_start,args=())
t1.start()
t2.start()
t1.join()
t2.join()
#print pointer1+pointer2 #this takes 650ms to run!

1 个答案:

答案 0 :(得分:1)

我在Java中遇到过这个问题。 用户建议,线程创建成本的开销正在放缓,以至于花费的时间更长。 我建议你尝试使用非常复杂的计算和你的gen(索引,值)函数中更多数字的线程代码。 如果gen函数需要更多时间,那么线程代码可能比简单的解决方案更好。