結論
あ、リクエスト用のスレッドつくればいいのか(汗
記事書きながら思いついた。ありがとうQiita。
はじめに
マルチスレッドでスクレイピング処理をしているときに、同一サイトで短時間多重リクエストしでかしそうになったので予防方法をメモする(別スレッドでリクエストするとスリープの意味をなさないので)
方法
リクエスト前後でスレッドをロックする
ロッククラスは以下の通りなので別スレッドから自由にロック、アンロックできる
プリミティブロック (primitive lock) オブジェクトを実装しているクラスです。スレッドが一度ロックを獲得すると、それ以後のロック獲得の試みはロックが解放されるまでブロックします。どのスレッドでもロックを解放できます。
import time
import threading
import requests
lock = threading.Lock()
def http_req(url):
global lock
lock.aquire()
res = requests.get(url)
time.sleep(5)
lock.release()
return res
def th1():
res = http_req(url)
# すっごいこと1
...
def th2():
res = http_req(url)
# すっごいこと2
...
def main():
# スレッドを立ち上げる処理
....
# スレッドを待機する処理
....
感想
あ、リクエスト用のスレッドつくればいいのか(汗
記事書きながら思いついた。ありがとうQiita。