Pythonスレッドのドキュメントから
CPython では、グローバル インタープリター ロックにより、Python コードを一度に実行できるスレッドは 1 つだけです (パフォーマンス指向のライブラリによっては、この制限を克服できる場合もあります)。アプリケーションでマルチコア マシンの計算リソースをより有効に活用したい場合は、マルチプロセッシングを使用することをお勧めします。ただし、複数の I/O バウンド タスクを同時に実行する場合は、スレッド化が適切なモデルです。
今、私はこのようなスレッドワーカーを持っています
def worker(queue):
queue_full = True
while queue_full:
try:
url = queue.get(False)
w = Wappalyzer(url)
w.analyze()
queue.task_done()
except Queue.Empty:
queue_full = False
ここでw.analyze()
は2つのことをしています
requests
ライブラリを使用して URL をスクレイピングするpyv8
javascript ライブラリを使用してスクレイピングされた html を分析する
私の知る限り、1
I/O バウンドであり、2
CPU バウンドです。
それは、GIL が申請したのに2
、私のプログラムが正しく動作しないということですか?