我試圖在python中重定向標準輸入,標準輸出和調試程序的標準錯誤,並迅速看到其他人已成功通過分配StringIO實例sys.stdin輸入/輸出/犯錯。Python3:線程安全機制重定向標準輸入,標準輸出,標準錯誤
但是,調試程序位於一個線程中,而StringIO實例正在使用不同線程寫入和讀取。沒有我能找到的文檔將StringIO對象描述爲線程安全,並且我可以將自己的讀/寫調用封裝在鎖中,但我不認爲我可以強制調試的程序使用這些相同的鎖。
我該如何強制StringIO做我想做的事?否則,我想要做什麼?
編輯: 按照要求的預期競爭條件的例子如下:
比方說,我是從標準輸出讀。我讀取了StringIO的全部內容,然後刷新對象......除了在讀取和刷新操作之間,調試程序已經打印了更多信息,這些信息也最終被刷新。換句話說,我正在失去一些信息。
編輯2: 我發現了另一個問題,基本上是問the same question,但他的回答似乎並不十分Python的,所以我要離開這個開放
對不起,如果這只是我不清楚,但你擔心什麼樣的線程不安全的行爲?你有沒有想要阻止的特定比賽? – turbulencetoo
我已經在一個快速編輯來說明我的意思是 –
使用一個隊列,把消息寫入從thread1,while循環thread2與'try:queue.get(timeout = 0.1),除了queue.Empty:通過'。 – T4rk1n