Large scale server application using DDD with Python?
dependency-injection, domain-driven-design, python
Solution
Not sure, but it sounds like you may be a new hire within this org coming from a java/.net shop ("...considering that DI is how i'm used to instantiating complex objects in the application layer it seems suspicious...).
Keep in mind
You can do DDD with clean design in almost any programming language.
Take a look at this video presented by Add Roll. Basically, the primary point being made is that solution scalability is determined by the architecture and design choices not the programming language or platform.
Also consider, Drop Box was built with Python and scaled to 1 million users before they ever considered any C-optimizations.
Net-net
From a product development perspective, you generally do not want to put any critical-path item at risk using a "new" technology. New can mean new to market or new to the team/org. In this case, based on the very first part of your post "We are a python shop ", I would at a minimum defer to your internal team's expertise and leverage your existing teams core competencies. Your project will have a much lower risk profile and achieve a quicker time to market versus retraining the staff to use another technology platform.
Problem
We are preparing to build a large scale server application. To model the logic effectively we're planning to use DDD, including the tactical patterns such as domain events, specifications, repositories and etc... Is onion architecture applicable in Python? Are the abstraction abilities sufficient in Python? Technically speaking: I've done a little research and saw that there is no popular DI container and actually DI is considered a bad practice in Python, considering that DI is how I'm used to instantiating complex objects in the application layer it seems suspicious... Architecturally speaking, There is no built in multithreading support in Python (CPython). The cooperative multithreading model offered by Python could be sufficient for single threaded architectures, with scale out options. or is it? Are there more challenges and things worth considering before diving in? The bottom line is : Did anyone have experience implementing a large scale enterprise application using DDD with Python? Or should we stick to .NET/Java and be on the safe side?