Да, я вижу, как это может быть немного запутанным, но в основном это вопрос пространств имен, а также различие в том, что пространство имен __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
имеют отдельные ячейки памяти.
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);
}