Почему параллельные фьючерсы заставляют http-запросы переходить к последнему общему ресурсу? - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь использовать concurrent.futures, чтобы получить много ответов за более короткое время, чем последовательно. Я попытался сделать следующее, но символ, который запрашивается, по какой-то причине переходит к последнему.

Код, который у меня есть:

from concurrent import futures

import requests


PARAMS = {
    'fmt': 'json',
}


def get_share(session, share):
    print('Getting Symbol {0}'.format(share))

    response = session.get(
        'https://example.com/api/eod/{0}'.format(share),
        params=PARAMS
    )

    return response


def requests_with_futures(share_list):
    close_list = []

    session = requests.Session()

    with futures.ThreadPoolExecutor(max_workers=4) as executor:
        future_results = [
            executor.submit(
                lambda: get_share(session, share))
            for share in share_list
        ]

    close_list = [f.result() for f in future_results]


if __name__ == '__main__':
    share_list = [
        'US.AAPL', 'US.AABA', 'US.AAL', 'US.ADT', 'US.AES', 'US.AFL',
        'US.AFNL', 'US.AFT', 'US.AGE', 'US.AIA', 'US.AST', 'US.ATO',
        'ZZZZZ'
    ]
    requests_with_futures(share_list)

Результаты:

Getting Symbol US.AAPL
Getting Symbol US.AABA
Getting Symbol US.AAL
Getting Symbol US.ADT
Getting Symbol ZZZZZ
Getting Symbol ZZZZZ
Getting Symbol ZZZZZ
Getting Symbol ZZZZZ
Getting Symbol ZZZZZ
Getting Symbol ZZZZZ
Getting Symbol ZZZZZ
Getting Symbol ZZZZZ
Getting Symbol ZZZZZ

Почему это не работает правильно?

...