我的个人博客

python 多线程编程的有趣的现象02

现在对于python多线程的编程又研究了一下,发现,刚才出现的格式问题可以成功解决了,但是各个线程之间的执行顺序问题还是表现出来不一定的特点,不过这对于多线程编程而言,几个相互平等的线程之间的执行顺序先后没有很大的要求,重要是能够体现多线程的“并行性”。

下面贴几张图:

这是修改后的代码,把原来的print语句改成了使用 sys.stdout.write(),原来一直以为这两种打印字符的方法是没有差别的。但是在执行多线程程序的时候,出现了差别,有时间要好好研究一下python的多线程实现机制和print语句的实现方法

 

一下两张是输出结果情况

 

 

这两种不同的输出结果显示了python在地位相同的多线程程序的时候并不会严格按照代码顺序来执行各个线程

以下一些测试则也可以简单证明这个推测:

代码:

 1 # -*- coding: utf-8 -*-
2 '''
3 filename:test.py
4 @author: cloudaice
5 '''
6 import sys
7 import thread
8 from time import sleep
9 from time import ctime
10
11 def loop0():
12 sys.stdout.write('start loop 0 at: %s\n' % ctime())
13 sleep(2)
14 sys.stdout.write('loop 0 done at: %s\n' % ctime())
15
16 def loop1():
17 sys.stdout.write('start loop 1 at: %s\n' % ctime())
18 sleep(3)
19 sys.stdout.write('loop 1 dome at: %s\n' % ctime())
20
21 def loop2():
22 sys.stdout.write('start loop 2 at: %s\n' % ctime())
23 sleep(4)
24 sys.stdout.write('loop 2 dome at: %s\n' % ctime())
25
26 def loop3():
27 sys.stdout.write('start loop 3 at: %s\n' % ctime())
28 sleep(5)
29 sys.stdout.write('loop 4 dome at: %s\n' % ctime())
30
31 def main():
32 sys.stdout.write('starting at: %s\n' % ctime())
33 thread.start_new_thread(loop0,())
34 sys.stdout.write("0和1之间\n")
35 thread.start_new_thread(loop1,())
36 sys.stdout.write("1和2之间\n")
37 thread.start_new_thread(loop2,())
38 sys.stdout.write("2和3之间\n")
39 thread.start_new_thread(loop3,())
40 sleep(10)
41 sys.stdout.write("all done at: %s\n" % ctime())
42
43 if __name__ == '__main__':
44 main()

输出结果:

 


 


代码:

 

 1 # -*- coding: utf-8 -*-
2 '''
3 filename:test.py
4 @author: cloudaice
5 '''
6 import sys
7 import thread
8 from time import sleep
9 from time import ctime
10
11 def loop0():
12 sys.stdout.write('start loop 0 at: %s\n' % ctime())
13 sleep(2)
14 sys.stdout.write('loop 0 done at: %s\n' % ctime())
15
16 def loop1():
17 sys.stdout.write('start loop 1 at: %s\n' % ctime())
18 sleep(3)
19 sys.stdout.write('loop 1 dome at: %s\n' % ctime())
20
21 def loop2():
22 sys.stdout.write('start loop 2 at: %s\n' % ctime())
23 sleep(4)
24 sys.stdout.write('loop 2 dome at: %s\n' % ctime())
25
26 def loop3():
27 sys.stdout.write('start loop 3 at: %s\n' % ctime())
28 sleep(5)
29 sys.stdout.write('loop 4 dome at: %s\n' % ctime())
30
31 def sayhello():
32 sys.stdout.write("我在这里呢\n")
33
34 def main():
35 sys.stdout.write('starting at: %s\n' % ctime())
36 thread.start_new_thread(loop0,())
37 sys.stdout.write("0和1之间\n")
38 thread.start_new_thread(loop1,())
39 sys.stdout.write("1和2之间\n")
40 sayhello()
41 thread.start_new_thread(loop2,())
42 sys.stdout.write("2和3之间\n")
43 thread.start_new_thread(loop3,())
44 sleep(6)
45 sys.stdout.write("all done at: %s\n" % ctime())
46
47 if __name__ == '__main__':
48 main()


输出结果:

 



posted @ 2012-01-25 14:31  cloudaice  阅读(818)  评论(0编辑  收藏  举报
我的个人博客