您的位置:首页 > 编程语言 > Python开发

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

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

下面贴几张图:



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

一下两张是输出结果情况





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

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

代码:

# -*- coding: utf-8 -*-
'''
filename:test.py
@author: cloudaice
'''
import sys
import thread
from time import sleep
from time import ctime

def loop0():
sys.stdout.write('start loop 0 at: %s\n' % ctime())
sleep(2)
sys.stdout.write('loop 0 done at: %s\n' % ctime())

def loop1():
sys.stdout.write('start loop 1 at: %s\n' % ctime())
sleep(3)
sys.stdout.write('loop 1 dome at: %s\n' % ctime())

def loop2():
sys.stdout.write('start loop 2 at: %s\n' % ctime())
sleep(4)
sys.stdout.write('loop 2 dome at: %s\n' % ctime())

def loop3():
sys.stdout.write('start loop 3 at: %s\n' % ctime())
sleep(5)
sys.stdout.write('loop 4 dome at: %s\n' % ctime())

def main():
sys.stdout.write('starting at: %s\n' % ctime())
thread.start_new_thread(loop0,())
sys.stdout.write("0和1之间\n")
thread.start_new_thread(loop1,())
sys.stdout.write("1和2之间\n")
thread.start_new_thread(loop2,())
sys.stdout.write("2和3之间\n")
thread.start_new_thread(loop3,())
sleep(10)
sys.stdout.write("all done at: %s\n" % ctime())

if __name__ == '__main__':
main()


输出结果:








代码:


# -*- coding: utf-8 -*-
'''
filename:test.py
@author: cloudaice
'''
import sys
import thread
from time import sleep
from time import ctime

def loop0():
sys.stdout.write('start loop 0 at: %s\n' % ctime())
sleep(2)
sys.stdout.write('loop 0 done at: %s\n' % ctime())

def loop1():
sys.stdout.write('start loop 1 at: %s\n' % ctime())
sleep(3)
sys.stdout.write('loop 1 dome at: %s\n' % ctime())

def loop2():
sys.stdout.write('start loop 2 at: %s\n' % ctime())
sleep(4)
sys.stdout.write('loop 2 dome at: %s\n' % ctime())

def loop3():
sys.stdout.write('start loop 3 at: %s\n' % ctime())
sleep(5)
sys.stdout.write('loop 4 dome at: %s\n' % ctime())

def sayhello():
sys.stdout.write("我在这里呢\n")

def main():
sys.stdout.write('starting at: %s\n' % ctime())
thread.start_new_thread(loop0,())
sys.stdout.write("0和1之间\n")
thread.start_new_thread(loop1,())
sys.stdout.write("1和2之间\n")
sayhello()
thread.start_new_thread(loop2,())
sys.stdout.write("2和3之间\n")
thread.start_new_thread(loop3,())
sleep(6)
sys.stdout.write("all done at: %s\n" % ctime())

if __name__ == '__main__':
main()


输出结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: