解决Python多线程输出结果乱套

在多线程下使用print输出时难免会遇到输出结果乱成一陀,比如这段代码在100个线程下的输出

for i in range(1000):
    print "This is a test." + str(i)

输出:

 This is a test.993This is a test.997This is a test.999


This is a test.994This is a test.998

This is a test.995This is a test.999

This is a test.996
This is a test.997
This is a test.998
This is a test.999
OK! spend time:1.58699989319

方法一:给代码加线程

    for i in range(maxURL):
        if lock.acquire():
            print "This is a test." + str(i)
        lock.release()

输出:

This is a test.999
This is a test.999
This is a test.999
This is a test.999
This is a test.999
This is a test.999
This is a test.999
This is a test.999
This is a test.999
This is a test.999
This is a test.999
OK! spend time:1.50500011444

方法二:用sys.stdout.write()代替print,首先导入sys模块,然后在字符串末端手动添加换行,代码如下:

for i in range(1000):
    sys.stdout.write("This is a test." + str(i) + '\n')

输出:

This is a test.996
This is a test.996
This is a test.997
This is a test.997
This is a test.998
This is a test.998
This is a test.999
This is a test.999
OK! spend time:1.51799988747

可以看到三种输出耗时都是差不多的,无需担心锁的效率问题

发表评论

[/0o0] [..^v^..] [0_0] [T.T] [=3-❤] [❤.❤] [^v^] [-.0] [!- -] [=x=] [→_→] [><] 更多 »
昵称

抢沙发~