在多线程下使用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
可以看到三种输出耗时都是差不多的,无需担心锁的效率问题
发表评论
抢沙发~