Python 不会按照给定字符串的顺序打印



最近,我一直在玩python中的螺纹和多处理,我想测试该代码,该代码按顺序打印'worker'一词...但是输出只是不是您通常期望的。

我发现了另一个特殊的区别,如果我以闲置运行代码(通过按F5(会得到错误的输出,但是如果我以CMD运行它,我会以正确的顺序获得正确的输出。

这是代码:

import threading
import os
def worker(num):
    """thread worker function"""
    print ('Worker: %sn' % num)
    return
threads = []
for i in range(5):
    t = threading.Thread(target=worker, args=(i,))
    threads.append(t)
    t.start()
os.system("pause")

这是空闲输出:

注意:每次运行代码时,顺序会更改。

Worker: 0
Worker: 2
Worker: 1
Worker: 3
Worker: 4

这是CMD输出:

***注意:***我在这里得到一些额外的线路。

Worker: 0
Worker: 1
Worker: 2

Worker: 3
Worker: 4

Press any key to continue . . .

我很困惑地狱。我正在做python大约2个月。

编辑:好的,我从评论中获得了一些清晰度,但是即使新线空间有所不同,每当我以CMD运行代码时,该订单都可以完美地执行。.您是否认为每次比赛条件都在打印时都有正确的"工人"的顺序在CMD中,而不是空闲?

这是另一个CMD输出:

Worker: 0 
Worker: 1
Worker: 2
Worker: 3 

Worker: 4 
Press any key to continue . . . 

为什么条件在闲置而不是cmd中出现?

首先,线程是异步的。它们不一定按照您启动它们的顺序运行,当一个线程中断以允许另一个线程运行时

第二,print(foo)在打印每个参数后已经打印了一个新线。也就是说, print("foo")print("foon", end='')是等效的。

第三,CMD输出不简单的事实

Worker: 0
Worker: 1
Worker: 2
Worker: 3
Worker: 4

表示种族条件。每个线程都有一个print调用,但是每个呼叫编写的字节在标准输出上都不是原子写的。例如,您显示的输出可以通过

来解释
  1. 工人0将其所有输出写入标准输出
  2. Worker 1除了将最终的新线写入标准输出
  3. 之外
  4. Worker 2将其所有输出写入标准输出
  5. Worker 1终于将其最终的新线写入标准输出
  6. Worker 3除了将最终的新线写入标准输出
  7. 之外
  8. Worker 4除了将最终的新线写入标准输出
  9. 之外
  10. Worker 3最终将其最终新线写入标准输出
  11. Worker 4最终将其最终的新线写入标准输出

相关内容

  • 没有找到相关文章

最新更新