所以最近我一直在使用python进行线程和多处理,我想测试这段代码,以便按顺序打印“ Worker”一词...但是输出结果并非通常所期望的。 / p>
我发现另一个特别的区别是,如果我在IDLE中运行代码(按F5),则会得到错误的输出,但是如果我在cmd中运行,则将以正确的顺序获得正确的输出。
以下是代码:
assign
以下是IDLE输出:
注意: :每次我运行代码时,顺序都会更改。
let sink = colorObject.colorpub.sink { // ... whatever
// or
let assign = colorObject.colorpub.map{Optional($0)}
.assign(to: \.backgroundColor, on: self.view)
这是CMD输出:
***注意:***我在这里得到了一些额外的换行符。
import threading
import os
def worker(num):
"""thread worker function"""
print ('Worker: %s\n' % num)
return
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
t.start()
os.system("pause")
我真是糊涂了。我正在做python大约2个月了。是的,我是一个典型的新手。请向我解释这个神秘的现象。而我正在使用python 3.7版本
编辑: 好的,我从注释中获得了一些清晰的信息,但是即使换行符的间隔有所不同,但是每次我在CMD中运行代码时,顺序都会被完美执行。在CMD中而不在IDLE中?
这是另一个CMD输出:
Worker: 0
Worker: 2
Worker: 1
Worker: 3
Worker: 4
为什么在IDLE中而不是在CMD中情况变得混乱?
答案 0 :(得分:3)
首先,线程是异步的。它们不一定按照您启动它们的顺序运行,并且当一个线程被中断以允许另一个线程运行时,取决于线程调度程序。
第二,print(foo)
在打印每个参数之后已经打印了换行符。也就是说,print("foo")
和print("foo\n", end='')
是等效的。
第三,CMD输出并非简单
Worker: 0
Worker: 1
Worker: 2
Worker: 3
Worker: 4
表示种族状况。每个线程只有一个print
调用,但是每个调用写入的字节不会自动写入标准输出。例如,您显示的输出可以用