Python多线程不起作用

时间:2015-01-06 08:31:42

标签: python multithreading

from multiprocessing.dummy import Pool as ThreadPool
import time
def f(x):
    val=x
    for i in xrange(100000):
        if i!=0:
            val*=i
            val%=10000
    return x
start = time.time()
iter=10000
pool=ThreadPool(8)
res=pool.map(f,xrange(100))
pool.close()
pool.join()
pool=ThreadPool(8)
res2=pool.map(f,xrange(100))
pool.close()
pool.join()
print "Elapsed Time: %s" % (time.time() - start)

以上是多线程代码,在我的8核计算机上运行时需要14s

from multiprocessing.dummy import Pool as ThreadPool
import time
def f(x):
    val=x
    for i in xrange(100000):
        if i!=0:
            val*=i
            val%=10000
    return x
start = time.time()
iter=10000
for i in xrange(100):
    f(i)
for i in xrange(100):
    f(i)
print "Elapsed Time: %s" % (time.time() - start)

以上是单线程代码,需要7s 任何人都可以向我解释一下吗? 感谢

2 个答案:

答案 0 :(得分:0)

我得到了类似的结果:

Elapsed Time: 4.83800005913 for the first code 
Elapsed Time: 2.95100021362 for the second code

你的代码只是计算一些东西,这不是多线程的强项,如果你想使用多线程,可以使用IO繁忙的工作,如文件或网络,但不只是计算一些东西。

答案 1 :(得分:-1)

this post所述,您无法与multiprocessing.dummy并行执行。