Pythonでどのように同時 に1000より多くのリクエストを送信できるか

Pythonで同時に数千の要求を実現する方法がいくつかあります。以下は一般的なメソッドです。

  1. スレッド処理
import threading
import requests

def send_request(url):
    response = requests.get(url)
    print(response.text)

urls = [...]  # 存储要发送请求的URL列表

threads = []
for url in urls:
    thread = threading.Thread(target=send_request, args=(url,))
    thread.start()
    threads.append(thread)

for thread in threads:
    thread.join()
  1. 非同期のI/Oを扱うための標準フレームワーク
  2. 非同期HTTPクライアントライブラリ
  3. 非同期に
  4. 差し迫る
import asyncio
import aiohttp

async def send_request(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            data = await response.text()
            print(data)

urls = [...]  # 存储要发送请求的URL列表

loop = asyncio.get_event_loop()
tasks = [send_request(url) for url in urls]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
  1. グレクエスト
  2. ジェベント

grequestsライブラリの使用方法:

import grequests

urls = [...]  # 存储要发送请求的URL列表

requests = [grequests.get(url) for url in urls]
responses = grequests.map(requests)

for response in responses:
    print(response.text)

gevent ライブラリーを使用する例:

import gevent
import requests

def send_request(url):
    response = requests.get(url)
    print(response.text)

urls = [...]  # 存储要发送请求的URL列表

greenlets = [gevent.spawn(send_request, url) for url in urls]
gevent.joinall(greenlets)

いずれの方法を選択する場合でも、同時リクエストの数を制御することに注意し、過剰なリソースの消費やサーバーの過負荷を避ける必要があります。

bannerAds