簡體   English   中英

Python多線程-全局解釋器鎖定

[英]Python multithreading - Global Interpreter Lock

Python 線程模塊文檔說了這樣的話

在CPython中,由於使用了全局解釋器鎖,因此只有一個線程可以一次執行Python代碼(即使某些面向性能的庫可能克服了此限制)。 如果希望您的應用程序更好地利用多核計算機的計算資源,建議您使用多處理。 但是,如果您要同時運行多個I / O綁定任務,則線程化仍然是合適的模型。

有人可以解釋我是否可以在自己的情況下使用線程模塊嗎?

我將檢測網站使用的框架。

這就是我的應用程序的工作方式

  • 我的MySQL數據庫包含大約一千萬個域(id,domain,framework)
  • 從數據庫中獲取1000行
  • 使用請求模塊一對一地抓取域
  • 檢測框架
  • 用結果更新數據庫行。

由於我有1000萬個域,因此將花費很長時間。 因此,我想通過使用線程來加快過程。

但是我不確定我的應用程序是否受I / O約束。 有人可以解釋嗎?

謝謝

我想,最耗時的活動將是獲取所有網址。

因此,您的問題的答案是:是的,您的應用很有可能受I / O約束。

您計划一一刮取域,這將導致處理時間過長。 您一定要同時進行。 我對與抓取網站有關的類似問題的回答中描述一種解決方案。

無論如何,URL的數量看起來確實很大,您可能需要利用將工作拆分為多個工作人員的優勢-為此,您可以使用例如Celery框架。 但是,由於您的任務實際上是I / O綁定的,因此,如果您的工作人員在多台計算機上工作,並且理想情況下具有獨立的連接性,那么您將只能獲得一定的速度。 我在DigitalOcean機器上做了類似的任務,並且效果很好。

暫無
暫無

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

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