簡體   English   中英

抑制舊庫中的多線程?

[英]Suppressing multi-threading in used libraries?

編輯 :我最終使用一種解決方法來獲得我想要的行為。 按照接受的答案中的建議禁用SSHTunnel中的線程幫助我確定了問題所在。


我有一個Python項目,它做一些事情,主要是ETL。 當我在本地運行它時,它工作正常,當我將其填充到docker容器中並在本地運行時,它工作正常,但是當我在雲中運行該Docker容器時,死鎖達到80%。

當我手動終止該進程時,出現以下錯誤鏈接,提示它是線程問題。 我沒有在代碼的任何地方顯式地使用線程(並且不是該主題的專家),並且假定它是我在內部使用線程的庫之一。

我必須解決此問題的想法是,以某種方式抑制我使用的庫的函數調用中發生的所有線程。

在Python中有一種萬能的方法嗎?


該程序的步驟包括將PostGresQL數據移至Google BigQuery中,然后從BigQuery中獲取數據(包括新數據),然后根據該數據創建Excel報告並通過電子郵件發送出去。

熊貓的數據框用於內部表示,並使用to_gbq方法輕松上傳到GBQ。 sqlalchemy和sshtunnel用於從Postgresql數據庫提取數據。 Openpyxl用於Excel編輯。

整個過程不到一分鍾即可在本地運行(在Docker容器內部或外部),並且手動在服務器上分別調用每個步驟也可以正常工作。 (引用的雲部署在Google Cloud VM實例上)

錯誤信息

我想不出任何方法來全局禁用線程。 至少不會破壞所有會使用它的代碼。

通過回溯來看,我假設你正在使用SSHTunnelForwardersshtunnel包。 這個類需要一個boolean參數threadedTrue作為默認值。

使用threaded=False實例化SSHTunnelForwarder禁用 _ThreadingForwardServer 的使用 _ForwardServer 該轉發服務器未使用socketserver.ThreadingMixIn ,這似乎是您的塊所處的位置。 因此,那應該可以解決您的問題。

但是,我很想知道您的項目為何在雲環境中受阻。 從屏幕截圖中的輸出來看,整個過程似乎已經完成,並且在關閉隧道轉發器時掛起了。 出於某種原因, sshtunnel軟件包的sshtunnel肯定sshtunnel默認情況下使用線程。 如果可能的話,我想堅持默認設置,但這只是我自己:)

暫無
暫無

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

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