Python >> Tutoriel Python >  >> Python Tag >> Requests

requêtes de publication asynchrones python

Le code de la question exécute toutes les requêtes POST d'une série, ce qui rend le code pas plus rapide que si vous utilisiez requests en un seul fil. Mais contrairement à requests , asyncio permet de les paralléliser dans un même thread :

async def make_account():
    url = "https://example.com/sign_up.php"
    async with aiohttp.ClientSession() as session:
        post_tasks = []
        # prepare the coroutines that post
        async for x in make_numbers(35691, 5000000):
            post_tasks.append(do_post(session, url, x))
        # now execute them all at once
        await asyncio.gather(*post_tasks)

async def do_post(session, url, x):
    async with session.post(url, data ={
                "terms": 1,
                "captcha": 1,
                "email": "user%[email protected]" % str(x),
                "full_name": "user%s" % str(x),
                "password": "123456",
                "username": "auser%s" % str(x)
          }) as response:
          data = await response.text()
          print("-> Created account number %d" % x)
          print (data)

Le code ci-dessus tentera d'envoyer toutes les requêtes POST en même temps. Malgré l'intention, il sera limité par aiohttp.ClientSession le connecteur TCP de qui autorise un maximum de 100 connexions simultanées par défaut. Pour augmenter ou supprimer cette limitation, vous devez définir un connecteur personnalisé sur la session.