私はスレッド化されたスクリプトで初めての試みをしようとしています。最終的には、私が以前に作ったオリジナルの線形スクレイピングスクリプトより少し速く動くことを望むウェブスクレーパーになるだろう。Pythonスレッド/スレッドの実装
いくつかのサンプルコードで読んだり演奏したりしています。インプリメンテーションが正しい限り、正しいと思われるものはまだわかりません。
from Queue import Queue
import threading
def scrape(queue):
global workers
print worker.getName()
print queue.get()
queue.task_done()
workers -= 1
queue = Queue(maxsize=0)
threads = 10
workers = 0
with open('test.txt') as in_file:
for line in in_file:
queue.put(line)
while not (queue.empty()):
if (threads != workers):
worker = threading.Thread(target=scrape, args=(queue,))
worker.setDaemon(True)
worker.start()
workers += 1
アイデアは私があるtest.txtファイル内のURLのリストを持っているということです。
は現在、私は私が演奏されている次のコードを持っています。私はファイルを開き、すべてのURLをキューに入れます。そこから、キューからプルして10個のスレッドを実行し、Webページをスクラップするか、この例では単にプルされた行をプリントアウトします。
機能が完了すると、「ワーカースレッド」が削除され、キューが空になるまで新しいワーカースレッドが置き換えられます。
私の実際の実装では、ある時点で私の関数スクレイプからデータを取り出して.csvファイルに書き込む必要があります。しかし、今は、スレッドを正しく実装する方法を理解しようとしています。
私は、上記の「Thread」を使用した同様の例を見てきました。また、継承したクラスを利用する「スレッド」の例も見てきました。私は何を使うべきか、それを管理する正しい方法を知りたいだけです。
私はここで簡単に移動できます。初心者はスレッドを理解しようとしています....そして、はい、私はそれが非常に複雑になる可能性があることを知っています。しかし、私はこれが最初の試行のために十分に簡単であるべきだと思います...
一般的なスレッディングはかなり複雑で、ほとんどの場合、マルチプロセッシング(.dummy)やコンカレントなどの抽象ライブラリを使用する方が簡単です – janbrohl