Python 多執行緒控制台輸出錯亂

2022-06-29 11:48:13 字數 1163 閱讀 5252

多執行緒在使用print()時,會在控制台上出現形如以下的錯亂顯示:

簡單搜尋了一下,網上有說 python3 的print是執行緒安全的,但是我這個是 python 3.8.5 啊。。

再仔細看一下,發現只有換行是錯亂的。這裡我想到了print()是自動新增換行的,可能這個新增換行的時候不是執行緒安全的,於是測試一下,自己新增換行:

print(f'-連線失敗:連線超時\n', end='')
結果就正常顯示了!。。

不想每次都設定end的話,可以使用 python 的偏函式:

import functools

print = functools.partial(print, end='')

但是這樣的話,還需要你自己在每次行末尾新增換行符。

還可以再自己直接重新定義一下print()函式解決上面的問題:

# 原先的print函式

_print = print

# 定義新的print函式

def print(text):

'''使輸出有序進行,不出現多執行緒同一時間輸出導致錯亂的問題。

'''_print(text + '\n', end='')

print()加鎖的解決方法:

# 原先的print函式和主線程的鎖

_print = print

mutex = threading.lock()

# 定義新的print函式

def print(text, *args, **kw):

'''使輸出有序進行,不出現多執行緒同一時間輸出導致錯亂的問題。

'''with mutex:

_print(text, *args, **kw)

多執行緒時控制台輸出亂序的問題

我看到很多人對這樣乙個問題尋求幫助 在多執行緒時,往控制台視窗輸出的內容是亂序的。舉個非常簡單的例子,如下 include stdafx.h include using namespace std dword winapi threadproc1 lpvoid lpparameter int i 0...

控制台輸出控制

by jingzhongrong 通過win32api提供的函式,可以對控制台程式的輸出進行控制,例如字型顏色 標題文字,以及各種屬性等等。主要使用到的函式以及宣告如下 handle getstdhandle dword nstdhandle 此函式用於獲取控制台輸出 輸入控制代碼。得到控制代碼之後...

python控制台輸出顏色

python控制台輸出顏色,out 是基本方法,還封裝了一些基本顏色方法,如red blue green 等 out 方法的color引數表示顏色,bgcolor表示背景顏色,style表示樣式 其他方法的引數類似,三個引數的具體取值封裝到color類,bgcolor類,style類中。基本方法 o...