Могу ли я сделать это быстрее в Python? - PullRequest
0 голосов
/ 28 апреля 2020

Я написал скрипт в python, который получает некоторые данные из Laravel, а затем строит URL-адреса на основе этих данных, после чего он должен выполнить запрос get для получения некоторых данных из каждого URL-адреса. Сначала я попытался написать это, просто разместив запросы в l oop, но это заняло около 4 секунд для одного запроса. Теперь я написал это с помощью asyn c и сократил время до 2 секунд. Вот мой код для asyn c:

import requests
import sys
import json
import asyncio
from concurrent.futures import ThreadPoolExecutor

a= sys.argv[2]
b= sys.argv[3]
c= sys.argv[4];


def fetch(session, r):
    bUrl= 'myurl/readData/'
    with session.get(bUrl + c+ '?name=' + r.split('-')[0] + '&lname=' +  
    r.split('-')[1] + '&x=' + a + '&y=' + b) as response:
         data = response.text
         print(data)

async def get_data_asynchronous():
      data= json.loads(sys.argv[1])
      with ThreadPoolExecutor(max_workers=10) as executor:
          with requests.Session() as session:
             loop = asyncio.get_event_loop()
             tasks = [
                loop.run_in_executor(
                    executor,
                    fetch,
                    *(session, r)
                  )
                  for r in data
              ]
             for response in await asyncio.gather(*tasks):
                 pass

def main():
    loop = asyncio.get_event_loop()
    future = asyncio.ensure_future(get_data_asynchronous())
    loop.run_until_complete(future)

main()

Как мне сделать это быстрее?

...