多執行緒在使用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...