Python:理解线程模块
在学习Python的threading模块时,我做了一个简单的测试。发现这些线程是顺序执行的,而不是并行的。有没有办法修改这个测试代码,让程序像多进程那样并行执行线程呢?
import threading
def mySlowFunc(arg):
print "\nStarting...", arg
m=0
for i in range(arg):
m+=i
print '\n...Finishing', arg
myList =[35000000, 45000000, 55000000]
for each in myList:
thread = threading.Thread(target=mySlowFunc, args=(each,) )
thread.daemon = True
thread.start()
thread.join()
print "\n Happy End \n"
修改后的代码:
这个版本的代码会启动6个“线程”,它们是“并行”运行的。不过,即使有6个线程,实际上只有两个CPU线程在工作(另外6个物理CPU线程会闲着,什么都不做)。
import threading
def mySlowFunc(arg):
print "\nStarting " + str(arg) + "..."
m=0
for i in range(arg):
m+=i
print '\n...Finishing ' + str(arg)
myList =[35000000, 45000000, 55000000, 25000000, 75000000, 65000000]
for each in myList:
thread = threading.Thread(target=mySlowFunc, args=(each,) )
thread.daemon = False
thread.start()
print "\n Bottom of script reached \n"
相关问题:
2 个回答
-1
如果Python没有这个叫做GIL的东西,你应该能通过修改代码,让所有线程都开始后再合并,这样就能看到真正的并行处理:
threads = []
for each in myList:
t = threading.Thread(target=mySlowFunc, args=(each,) )
t.daemon = True
t.start()
threads.append(t)
for t in threads:
t.join()
用上面的代码,你至少能看到线程交替执行的情况:线程#2在线程#1完成之前做了一些工作。但是,你不会看到真正的并行处理。想了解更多背景知识,可以看看GIL的链接。