Многопоточность в AWS lambda с использованием Python3 - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь реализовать многопоточность в лямбда-AWS.Это пример кода, который определяет формат моего исходного кода, который я пытаюсь выполнить в лямбде.

import threading
import time

def this_will_await(arg,arg2):
  print("Hello User")
  print(arg,arg2)

def this_should_start_then_wait():
  print("This starts")
  timer = threading.Timer(3.0, this_will_await,["b","a"])
  timer.start()
  print("This should execute")

this_should_start_then_wait()

На моей локальной машине этот код работает нормально.Вывод, который я получаю:

This starts
This should execute
.
.
.
Hello User
('b', 'a')

Те 3.означает, что он ожидал 3 секунды, чтобы завершить выполнение.

Теперь, когда я выполняю то же самое в AWS lambda.Я только получаю

This starts
This should execute

Я думаю, что он не вызывает функцию this_will_await ().

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Я не совсем уверен, если вы можете поставить задержки во время потоков в лямбда. Я также столкнулся с той же проблемой и обнаружил статью «Параллельная обработка в Python с AWS Lambda» .

0 голосов
/ 20 ноября 2018

Вы пробовали добавить timer.join()? Вам нужно присоединиться к потоку Timer, потому что в противном случае среда Lambda прекратит работу, когда родительский поток завершит работу.

Этот код в лямбда-функции:

import threading
import time

def this_will_await(arg,arg2):
  print("Hello User")
  print(arg,arg2)

def this_should_start_then_wait():
  print("This starts")
  timer = threading.Timer(3.0, this_will_await,["b","a"])
  timer.start()
  timer.join()
  print("This should execute")

this_should_start_then_wait()

def lambda_handler(event, context):
    return this_should_start_then_wait()

Производит этот вывод:

This starts
Hello User
b a
This should execute
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...