簡體   English   中英

Python - 如何將線程轉換為線程安全的

[英]Python - How to turn thread into thread-safe

所以我一直在想我應該如何制作一個線程安全的,原因就是每當我運行我為了好玩而創建的程序時。 我意識到控制台有太多的垃圾郵件,以至於它沒有足夠快到一個接一個地打印出來。

基本上我所做的就是我使用一個列表,這個列表不僅僅是一個不同的水果列表

list = ['apple','banana','kiwi'....]

然后我有一些叫做data東西,基本上是用logger打印出去的。

logger.log(data)

完整的程序看起來像

 def sendData(list, data):

     logger.log(data)

 def main():
    ...
    ...
    ...
    data_list.append((list[i], data))

    for index, data in data_list:
         threading.Thread(target=sendData, args=(list, data)).start()

所以基本上我們可以看到這可能是很多線程同時運行會導致交互操作會使控制台打印出很多錯誤,所以問題是:

如何將其轉換為某種線程安全的? 各種線程的睡眠會開始變得神奇嗎?

您可能希望查看threading.Lock() ,它可以用於防止多個線程同時執行輸出任務,從而混合控制台中的單詞:

def sendData(list, data):
    with lock:
        logger.log(data)

lock = threading.Lock()
def main():
    ...
    ...
    ...
    data_list.append((list[i], data))

    for index, data in data_list:
         threading.Thread(target=sendData, args=(list, data)).start()

這將阻止多個線程同時運行“with”中的代碼。

當線程X進入“with”塊時,它將聲明鎖定。 如果另一個線程試圖聲明它(輸入“with”塊),它將不得不等到線程X釋放鎖定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM