3

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つのことをしています

  1. requestsライブラリを使用して URL をスクレイピングする
  2. pyv8javascript ライブラリを使用してスクレイピングされた html を分析する

私の知る限り、1I/O バウンドであり、2CPU バウンドです。

それは、GIL が申請したのに2、私のプログラムが正しく動作しないということですか?

4

1 に答える 1

4

説明は、GIL正確さについては何も述べておらず、効率についてのみ述べています。

が CPU バウンドの場合2、スレッド化からマルチコア パフォーマンスを引き出すことはできませんが、プログラムは正しく実行されます。

CPU の並列処理が気になる場合は、Python のmultiprocessingライブラリを使用する必要があります。

于 2014-05-09T21:40:43.757 に答える