Я использую потоки 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?