Tan*_*Woo 8 python multithreading
我正在阅读PyMOTW线程帖子
第一个例子:
import threading
def worker():
"""thread worker function"""
print 'Worker'
return
threads = []
for i in range(5):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
Run Code Online (Sandbox Code Playgroud)
我运行它,得到结果:
Worker
-Worker
Worker
-Worker
Worker
Run Code Online (Sandbox Code Playgroud)
的-
是space
,每一次的格式将是差异
但我不知道为什么会这样space
?
有时它会输出empty line
,为什么?
Ned*_*der 13
如果检查print语句的字节代码,它看起来像这样:
>>> def f():
... print "Worker"
...
>>> dis.dis(f)
2 0 LOAD_CONST 1 ('Worker')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
实际上,打印许多项会产生许多PRINT_ITEM字节代码:
>>> def g():
... print "Worker", "Hello"
...
>>> dis.dis(g)
2 0 LOAD_CONST 1 ('Worker')
3 PRINT_ITEM
4 LOAD_CONST 2 ('Hello')
7 PRINT_ITEM
8 PRINT_NEWLINE
9 LOAD_CONST 0 (None)
12 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
为了使多个项目之间有空格,文件对象有一个名为softspace的标志,指示是否应在下一个项目之前输出空格.PRINT_ITEM和PRINT_NEWLINE的代码大致如下所示:
def PRINT_ITEM(f, item):
if f.softspace:
f.write(' ')
f.write(str(item))
f.softspace = True
def PRINT_NEWLINE(f):
f.write('\n')
f.softspace = False
Run Code Online (Sandbox Code Playgroud)
当您从多个线程一次写入stdout时,这些操作会以随机方式交错.因此,不是交替使用PRINT_ITEM和PRINT_NEWLINE,而是可以连续使用两个PRINT_ITEM.如果发生这种情况,您的输出中将有额外的空格,因为两个PRINT_ITEM和softspace标志将产生额外的空间.