Diagram di bawah menunjukkan hasil dari Apache Benchmark paling sederhana untuk kerangka kerja Django versi 3.1, Flask 1.1 dan AIOHTTP 3.7. AIOHTTP berjalan dalam mode asynchronous single-threaded "biasa", Django dan Flask dilayani oleh server WSGI sinkron Gunicorn dengan jumlah thread sama dengan jumlah inti prosesor yang tersedia * 2. ASGI tidak berpartisipasi dalam pengujian.
Kondisi pengujian
PostgreSQL. :
, , , .
AIOHTTP asyncpg, Django Flask — SQLAlchemy ORM ( ) psycopg2.
Django (django-admin startproject, manage.py startapp . .), ListView. Flask AIOHTTP «Hello, world», .
SELECT r.id, r.auth_user_id, r.status, r.updated, r.label, r.content, u.username,
ARRAY_AGG(t.tag) tag, COUNT(*) OVER() cnt,
(
SELECT COUNT(*) FROM record r2
WHERE
r2.parent_id IS NOT NULL
AND r2.parent_id = r.id
AND r2.status = 'new'
) AS parts
FROM record r
JOIN auth_user u ON u.id = r.auth_user_id
LEFT JOIN tag t ON t.kind_id = r.id AND t.kind = 'rec'
WHERE r.parent_id IS NULL AND r.status = 'new'
GROUP BY r.id, u.username
ORDER BY r.updated DESC
LIMIT 10 OFFSET 0
, , , .
AIOHTTP asyncpg, Django Flask — SQLAlchemy ORM ( ) psycopg2.
Django (django-admin startproject, manage.py startapp . .), ListView. Flask AIOHTTP «Hello, world», .
Hasil dari menjalankan tes pada mesin lokal (4 inti CPU):
UPD: seperti yang ditulis dengan benar di komentar, untuk perbandingan yang jujur, Anda harus menjalankan AIOHTTP di belakang Gunicorn, atau mengurangi jumlah pekerja menjadi 1.
Tes yang sama pada VDS prosesor tunggal yang nyata (ping sekitar 45 ms):
Selama pengujian, AIOHTTP menggunakan 100% dari satu inti CPU, Flask dan Django - 100% dari semua inti yang tersedia.
kesimpulan
Faktanya, membandingkan aplikasi asynchronous dan multithreaded tidak sepenuhnya benar - keduanya memecahkan masalah yang berbeda. Oleh karena itu, hasilnya tampak cukup logis: dalam pengujian lokal, AIOHTTP hanya memiliki sumber daya yang lebih sedikit, dalam kondisi yang sama, kinerja diratakan.
Tetapi hasil sederhana dari Flask sulit untuk dijelaskan, saya gagal untuk "mengoverclock" kerangka kerja ini.