Использование aws-lambda для вставки данных в DynamoDB

Да, я вижу, как это может быть немного запутанным, но в основном это вопрос пространств имен, а также различие в том, что пространство имен __main__ не считается частью списка импортированных модулей. Это позволяет файлу, являющемуся точкой выполнения (и, следовательно, занимая пространство имен __main__), также импортироваться в качестве модуля. С другой стороны, если один и тот же модуль импортируется более одного раза, интерпретатор просто позволяет всем различным импортам указывать на одно и то же место в памяти

. Из-за этого в коде, который вы показываете выше, вы на самом деле имеют две разные версии A: у вас есть __main__.A, и у вас есть __main__.t2.t1.A. Второй вопрос возникает из-за того, что __main__ импортирует t2, который, в свою очередь, импортирует t1 в качестве модуля.

Когда вы запускаете t2.f(), вы устанавливаете __main__.t2.t1.A.flag = True, а затем печатаете Это. Впоследствии, когда вы вызываете print(A.flag), вы печатаете значение в __main__.A.flag, которое никогда не менялось.

Надеюсь, что это по меньшей мере немного.

Друг Я всегда говорил, что информатика - экспериментальная наука. Давайте запустим отладчик.

Добавляю pdb.set_trace() к исполнению, а t1.py теперь выглядит так:

#!/usr/bin/python
import t2

class A:
        flag = False

if __name__ == "__main__":
    import pdb; pdb.set_trace()
    t2.f()
    print(A.flag)

И это то, что мы получаем:

$ python t1.py
> /Users/martin/git/temp/t1.py(9)<module>()
-> t2.f()
(Pdb) A
<class __main__.A at 0x10ec9ba78>
(Pdb) t2.t1.A
<class t1.A at 0x10ec9ba10>
(Pdb) 

Обратите внимание, что A имеют отдельные ячейки памяти.

0
задан John Rotenstein 31 March 2019 в 02:42
поделиться

1 ответ

saveData() - async, поэтому он возвращает обещание. Вам нужно await на это. Кроме того, я не понимаю, почему вы отказались от вызова .promise (). Использование обратных вызовов устарело и намного более запутанно.

Ваш код должен выглядеть следующим образом:

module.exports.saveData = async () => {
     let params = {
        TableName: "SynData",
        Item:{
            "synId": 66,
            "synValue": 1579.21,
            "synTime": "2019-01-01"
        }
    };
    return await documentClient.put(params).promise();
};

На вашем клиенте просто дождитесь saveData ():

for(let i = 0; i < allValues.length; i++){
   await db.saveData(i, allValues[i], allStart);
}
0
ответ дан Thales Minussi 31 March 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: