На странице ошибки нужно нажать ссылку "switch to copy-paste view", скопировать полный текст traceback'а и вставить вместо изображения. На 100% уверен, что проблема связана не с приведённым вами кодом.
Иван Шумов, не. В случае event sourcing'а фиксация промежуточных значений выполняется только в виде snapshot'ов раз в некоторый период времени, а делается это только для экономии ресурсов, чтобы не вычислять баланс пересчётом всех операций за десять лет, например. В остальном в базу только пишутся события и никогда ничего не изменяется и не удаляется.
Иван Шумов, как раз обновления данных в БД приводят к неисправимым проблемам чаще, чем вычисления по event source. Ошибку в коде можно устранить и пересчитать по исходным данным, даже если она обнаружилась через полгода, а вот неправильные апдейты уже не откатишь так легко.
У заказа стоит поминутный тариф, каждую минуту нужно списывать средства со счёта.
Не нужно. Правильно хранить время начала тарификации, а баланс вычислять как произведение количества минут прошедшмх с начала тарификации на стоимость минуты, вычтенные из баланса.
Hemul GM, зависит от того, какая операция. I/O bound задачи с одинаковой скоростью выполняются хоть в Python, хоть в Assembler. А в наше время даже вычисления - это I/O bound, так как производятся на GPU в основном.
ODNik, во-первых, сам по себе язык быстрым или медленным быть не может, может быть быстрой или медленной среда выполнения.. Если говорить конкретно про интерпретатор CPython, то медлительным он будет, если применять его не по назначению или неправильно. При правильном же применении его хватает и для перемалывания big data, и для нужд ML в корпорациях типа Сбера, и для высоконагруженных web-приложениях типа Instagram.