2017-07-18 73 views
1

使用python,我寫了一個令人討厭的cralwer系統,從每個地方政府的網站提供一些東西,並且總的網站數超過100,以防萬一他們的網頁改變了,我不得不使用重新加載來進行熱更新。但我想知道如果重新加載是線程安全的。因爲我說,我正在線程1中重新加載模塊Cralwer1,但同時線程2正在使用Cralwer1。線程1的重新加載是否會導致線程2失敗?如果是這樣,我必須做一個鎖或什麼,否則,我可以愉快地做沒有額外的工作重新加載。誰能幫我嗎?Python重新加載線程安全嗎?

+0

你爲什麼使用'reload'呢? – user2357112

+0

用於熱更新。 –

回答

1

是Python的重載線程安全的?

重載()執行模塊中的所有純Python代碼。任何純Python步驟都可以隨時進行線程切換。所以,這絕對不安全。

0

reload =在Crawler1中重新執行頂級代碼。

一般來說沒有更多的信息/代碼示例,可以:

  • 封裝該踢的東西掉了「操作」頂級代碼,例如把它放在函數或類中,然後調用它而不是重新加載整個模塊。這可能涉及調用/添加一些清理功能。

  • 使用一個全局變量,thread1和thread2將翻轉並注意防止相互踩踏。這並不能很好地擴展,但也可以防止/延遲鎖的使用。

  • 使用鎖其實並不難, ,甚至支持上下文管理器: https://docs.python.org/3/library/threading.html#with-locks