0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python マルチスレッドで同一サイトにHTTPリクエストするときのスクレイピングTip

Last updated at Posted at 2022-02-22

結論

あ、リクエスト用のスレッドつくればいいのか(汗
記事書きながら思いついた。ありがとう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。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?