Низкая производительность EC2 с Python Threading? - PullRequest
0 голосов
/ 22 октября 2019

Я использую потоки Python в конечной точке REST, чтобы конечная точка могла запустить поток, а затем немедленно вернуть клиенту 200 OK во время выполнения потока. (Затем клиент опрашивает состояние сервера для отслеживания прогресса потока).

Код выполняется в моей локальной системе разработчика за 7 секунд, но занимает 6 минут в AWS EC2 m5.large.

Вот как выглядит код:

    import threading
    [.....]

    # USES THREADING
    # https://stackoverflow.com/a/1239108/364966
    thr = threading.Thread(target=score, args=(myArgs1, myArgs2), kwargs={})
    thr.start() # Will run "foo"
    thr.is_alive() # Will return whether function is running currently

    data = {'now creating test scores'}
    return Response(data, status=status.HTTP_200_OK)

Я отключил многопоточность, чтобы проверить, не было ли это причиной замедления, например:

    # USES THREADING
    # https://stackoverflow.com/a/1239108/364966
    # thr = threading.Thread(target=score, args=(myArgs1, myArgs2), kwargs={})
    # thr.start() # Will run "foo"
    # thr.is_alive() # Will return whether function is running currently

    # FOR DEBUGGING - SKIP THREADING TO SEE IF THAT'S WHAT'S SLOWING THINGS DOWN ON EC2
    score(myArgs1, myArgs2)

    data = {'now creating test scores'}
    return Response(data, status=status.HTTP_200_OK)

... и он работал в 5 секунд на EC2. Это доказывает, что что-то в том, как я обрабатываю потоки в EC2, является причиной замедления.

Есть ли что-то, что мне нужно настроить в EC2 для лучшей поддержки потоков Python?

1 Ответ

0 голосов
/ 24 октября 2019

Консультант, сертифицированный AWS, сообщил мне, что EC2, как известно, медленно выполняет потоки Python , и вместо этого использует лямбда-функции AWS.

...