Если в конструкторе структуры лежит тяжелая суровая логика, тогда, конечно, предпочтительнее иметь Dictionary. Но торчать им наружу все равно нельзя: абсолютно ничто не мешает добавить в этот словарь данные "извне".
skorpix: Можно еще предположить, что статус реально выставляется в new, но потом его кто-то сразу перетирает. Можно на уровне БД какой-нибудь триггер повесить, чтобы ситуацию отследить.
skorpix: Ну да, транзакция ОК, эти изменения утвердились. Уже после этого вызывается задача, в ней что-то идет не так (ошибка вылетает или еще чего); она в итоге валится и никаких изменений не делает.
Судя по докам, on_commit вызывается после коммита, т.е. сам по себе он частью транзакции не является. Т.е. сама задача может сбойнуть, и тогда ее изменения ожидаемо потеряются, а все, что сделала транзакция, сохранится.
Тогда любая очередь (ZeroMQ, RabbitMQ) плюс внешний обработчик на чем-то быстром. Не уверен, что питон будет сильно быстрее, так что сразу брать что-то компилируемое и многопоточное (Go, .NET, Java, C++, наконец :)).
Можно просто в конструктор подсунуть заведомо неправильный адрес прокси и попробовать вызвать open. Если прокатит, значит он зашел на хост в обход прокси; если будет ошибка, значит он-таки через прокси пролезть пытался.
Django разве куда-то стартует? Стартует веб-сервер. И, кстати, в чем проблема? Когда Postgre подымется, ошибка пропадет, запросы станут корректно обрабатываться.
Роман Назаркин: уточните, пожалуйста, чем плохи ajax-функции jQuery? Насколько помню, $.ajax умеет практически все, что в принципе может понадобиться. Работу с DOM можно свести к минимуму, просто генерируя какие-то блоки по шаблонам (поможет библиотечка Underscore) и втыкая в нужные места.
А так, можно, разумеется, и ReactJS или другой фреймворк использовать безо всяких SPA-шных примочек, только возникает ощущение, что в контексте вашей задачи это будет своего рода стрельба из пушки по воробьям.
Да тут и расписывать нечего: подключаемся к хосту по FTP или еще как (хостинг-провайдер должен предоставлять сведения о способах получения доступа к содержимому) и сливаем все файлики к себе. Только по-прежнему неясно, зачем такие сложности, если можно просто попросить. Или вы фрилансера прокинуть планируете?
Полина Флор: Данные останутся на старом винте, разумеется. Можно прикупить коробочку для внешнего диска и в эту коробочку страдальца засунуть. После чего подключить к компу как обычную флешку. Возможно, что-то из него вытащить получится.
А зачем резолвить зависимости вручную, если можно переложить эту работу на фабрику контроллеров? И пусть себе зависимости втягиваются через параметры конструктора, нет в этом криминала.
Тогда перегнать массив в, скажем, очередь. Каждый поток будет забирать из очереди элемент и обрабатывать. Сам момент забора синхронизировать Lock'ом, например. Тело потока завернуть в try, чтобы при любой ошибке элемент вернуть обратно в очередь.
atts[i][atts[i]['type']][i] - вот тут проблема, на мой взгляд.
atts[i][atts[i]['type']] - это элемент photo, который массивом не является и 0-го элемента не имеет.
Что за указатель на старое значение? Почему нельзя просто каждому потоку выделить "свой" диапазон индексов, по которым он будет брать значения из массива; так точно не пересекутся.