Zrobiłem aplikację kliencką, która używa protokołu HTTP do komunikacji z serwerem Python 2 przy użyciu prostego interfejsu API. Serwer wykorzystuje dość ORM SQLAlchemy do obsługi danych dla tych żądań HTTP. Problem polega na tym, że wykorzystanie mojego procesora jest dość wysokie, nawet przy niewielu aktywnych klientach. Ten serwer powinien być w stanie obsłużyć kilkuset klientów jednocześnie na około 1 żądanie na sekundę na klienta, więc nadal powinno być możliwe do zarządzania (a przynajmniej taką mam nadzieję).Jak poprawić wydajność SQLAlchemy?
Jak mogę poprawić wydajność? Wiem, że problemem jest ORM, ponieważ cProfile pokazuje to całkiem wyraźnie. Pojedyncze zapytanie najwyraźniej wykonuje około 10000 instrukcji w języku Python, co wydaje się dość dziwne. Próbowałem podłączyć różne silniki baz danych/backend i zmieniłem interpreter na Pypy dla zabawy, ale oczywiście nie pomogło to pierwotnemu problemowi, a także nie poprawiło wydajności.
Co ja tu robię źle? Naprawdę mam nadzieję, że to "dobrze, duh!" problem.
Czy moje relacje powinny być innego rodzaju? chętni, leniwi, dynamiczni, itp.? W tej chwili nie precyzuję niczego szczególnego.
Pomoc bardzo doceniona.
spójrz na moją odpowiedź http://stackoverflow.com/questions/1171166/how-can-i-profile-a-sqlalchemy-powered-application/1175677#1175677 dla niektórych miejsc, aby rozpocząć – zzzeek