AWS Lambda - использование подпроцессов Python для параллельного вызова интерфейса командной строки.[MacOS] - PullRequest
0 голосов
/ 28 июня 2019

Поэтому я пытаюсь использовать интерфейс командной строки AWS для вызова лямбда-функции с использованием подпроцессов, чтобы вызовы выполнялись параллельно.Моя функция имеет время выполнения около 60 секунд, но кажется, что мои вызовы CLI не все проходят, но вместо этого более поздние вызовы должны ждать завершения предыдущих.Это вызывает большие разрывы между тем, когда я получаю ответы, и я не достигаю цели 100 одновременных вызовов функций.

Вот упрощенная версия моей программы:

#!/usr/bin/env python3

import ast
import datetime
import json
import random
import subprocess
import time

# Get the payload from exampleCLI.json
exp = json.load(open("./experiments/exampleCLI.json"))
payload = random.choice(exp['payloads'])
jsonString = str(json.dumps(payload))

# Define the lambda function to call.
cmd = ['aws', 'lambda', 'invoke', '--invocation-type', 'RequestResponse', '--function-name', 'multiCalcService', '--region', 'us-east-1', '--payload', jsonString, '/dev/stdout']

# Create the processes all at once.
calls = 100
procs = [ subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) for i in range(calls) ]

print("Threads created, waiting for responses.... Processes created: " + str(len([procs])))

# Get the responses.
for process in procs:
    o, e = process.communicate()
    jsonResponse = str(o.decode('ascii')).split('\n')[0][:-1]
    print(str(datetime.datetime.now()))

Ответы возвращаютсявыглядит так:

2019-06-27 14:26:29.717961
2019-06-27 14:26:29.718099
2019-06-27 14:26:29.718194
2019-06-27 14:26:30.072807
2019-06-27 14:26:30.072960
2019-06-27 14:26:30.073088
2019-06-27 14:26:30.073170
2019-06-27 14:26:30.073252
2019-06-27 14:26:30.289007
2019-06-27 14:26:30.289227
2019-06-27 14:26:30.289321
2019-06-27 14:27:27.229260 <-- Major gap
2019-06-27 14:27:27.229404
2019-06-27 14:27:27.687887
2019-06-27 14:27:27.688045
2019-06-27 14:27:27.688160
2019-06-27 14:27:30.918193
2019-06-27 14:27:30.918362
2019-06-27 14:27:30.918477
2019-06-27 14:27:30.918597
2019-06-27 14:27:30.918699
2019-06-27 14:27:30.918808
2019-06-27 14:27:30.918912
2019-06-27 14:27:30.919017
2019-06-27 14:27:30.919107
2019-06-27 14:27:30.919211
2019-06-27 14:27:30.919315
2019-06-27 14:27:30.919387
2019-06-27 14:27:30.919474
2019-06-27 14:27:30.919657
2019-06-27 14:27:30.919780
2019-06-27 14:27:30.919887
2019-06-27 14:27:30.920030
2019-06-27 14:27:30.920107
2019-06-27 14:27:30.920185
2019-06-27 14:27:30.920258
2019-06-27 14:27:30.920330
2019-06-27 14:28:29.887825 <- Major gap
2019-06-27 14:28:29.887976
2019-06-27 14:28:29.888115
2019-06-27 14:28:29.888213
2019-06-27 14:28:29.888286
2019-06-27 14:28:29.888431
2019-06-27 14:28:29.888558
2019-06-27 14:28:29.888646
2019-06-27 14:28:29.888722
2019-06-27 14:28:29.888798
2019-06-27 14:28:29.888877
2019-06-27 14:28:29.888952
2019-06-27 14:28:29.889084
2019-06-27 14:28:29.889195
2019-06-27 14:28:29.889282
2019-06-27 14:28:29.889433
2019-06-27 14:28:29.889569
2019-06-27 14:28:29.889667
2019-06-27 14:28:29.889746
2019-06-27 14:28:29.889876
2019-06-27 14:28:29.890000
2019-06-27 14:28:29.890096
2019-06-27 14:28:29.890179
2019-06-27 14:28:29.890265
2019-06-27 14:28:29.890343
2019-06-27 14:28:29.890419
2019-06-27 14:28:29.890497
2019-06-27 14:28:29.890603
2019-06-27 14:28:29.890691
2019-06-27 14:28:29.890821
2019-06-27 14:28:29.890926
2019-06-27 14:28:29.890999
2019-06-27 14:28:29.891072
2019-06-27 14:28:29.891152
2019-06-27 14:28:29.891233
2019-06-27 14:28:29.891308
2019-06-27 14:28:29.891382
2019-06-27 14:28:29.891456
2019-06-27 14:28:29.891533
2019-06-27 14:28:29.891607
2019-06-27 14:28:29.891681
2019-06-27 14:28:29.891768
2019-06-27 14:28:29.891877
2019-06-27 14:28:29.892031
2019-06-27 14:28:29.892165
2019-06-27 14:28:29.892252
2019-06-27 14:28:29.892330
2019-06-27 14:28:29.892403
2019-06-27 14:28:29.892479
2019-06-27 14:28:29.892554
2019-06-27 14:28:29.892631
2019-06-27 14:28:29.892707
2019-06-27 14:28:29.894837
2019-06-27 14:28:29.894992
2019-06-27 14:28:29.895173
2019-06-27 14:28:29.895292
2019-06-27 14:28:29.895412
2019-06-27 14:28:29.895540
2019-06-27 14:28:29.895635
2019-06-27 14:28:29.895722
2019-06-27 14:28:29.895800
2019-06-27 14:28:29.895878
2019-06-27 14:28:29.895959

Как я уже говорил, эти серьезные пробелы приводят к тому, что я не могу достичь желаемых 100 одновременных вызовов.Я позаботился о том, чтобы запустить этот сценарий несколько раз, чтобы прогреть платформу FaaS, но все еще вижу это поведение даже после нескольких итераций.

Эта проблема не является исключительной для AWS Lambda, такое же поведение наблюдается и при вызовефункции в IBM или Google Cloud Функции через их CLI.Похоже, что проблема как-то связана с подпроцессами Python в MacOS.

Мой профессор запускал эту программу на своем ноутбуке под управлением Ubuntu и НЕ испытывал этих пробелов.Я попытался запустить свою программу на Python в Ubuntu, используя виртуальную машину, и увидел то же поведение.Это действительно смущает меня из-за того, что может быть причиной проблемы.

Любой совет, который может объяснить, почему это происходит, будет принят с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...