Python async is a humbug

Opublikowano: 23.05.2020

Ostatnia modyfikacja: 07.02.2024

async

python

rant

Ponownie zanurkowałem w rzeczywistość programowania asynchronicznego w Pythonie i prawdopodobnie wkrótce znowu wycofam się z uczuciem obrzydzenia.

Prawie jak pizza

Naprawdę bardzo chcę sobie przyswoić jak się to robi asynchronicznie, czyli z tym całym async/await. I chyba wreszcie przy tej próbie to zrozumiałem. Po czym spróbowałem zrobić sobie czysto edukacyjnie małą aplikację która robi coś konkretnego i w szybkim tempie zacząłem siwieć.

To się nie nadaje do niczego.

Jest cała masa rzeczy, które było zrobić łatwo - biblioteki, ramówki, obudowane szybkie pętle itp. Jak się wie co i jak, to taką rzecz jest prosto zrobić. Potem oczywiście można spędzić nieskończenie wiele czasu na cyzelowaniu tego, ale towar już działa i dobrze kopie. Można też na początkowym etapie wybrać ścieżkę procrastination i zatopić się w nie kończących się dyskusjach w dziesiątkach ticketów.

Problem się zaczyna, gdy chcesz tego użyć do czegoś konkretnego. Prosta aplikacja czytnika newsów RSS z frontem w Javascripcie, więc dobrze by było żeby backend miał jakieś storage, Redis do tego byłby idealny. No to co my tam mamy do tego Redisa? Ups, aioredis nie dotykany od pół roku, ludzie już zadają pytania czy projekt jest/będzie utrzymywany. Skoro takie pytania się pojawiają to można wnosić, że niekoniecznie będzie. Nie, poważnie? Jedna z najpoważniejszych usług sieciowych współczesnego świata i takie coś? Banda przedszkolaków?

I tak jest ze wszystkim innym związanym z asyncio i innym asyncem. Bronią się tylko projekty jednoosobowe, jak Curio, albo już mocno ugruntowane, które w dodatku nie są community project jak Twisted, jednakowoż Curio ma bardzo ograniczony zakres stosowania, a Twisted… No wiadomo, najlepsze job sesurity, w dodatku znam je już dość dobrze, a nie chodzi o to, żeby tłuc coś co już znam. Naprawdę chciałem zrobić coś async po nowemu, ale chyba jednak nic z tego nie będzie. Brakuje infrastruktury. Bo o tym czy wystartuje nie przesądza to, czy biblioteka/ramówka jest fajna - tylko czy są do niej to wszystkie dodatki, które powodują, że ludzie używają jej do robienia konkretnych rzeczy. Takie właśnie dodatki jak biblioteka kliencka do Redisa. Przypadkiem ta dla Twisted działa o wiele lepiej niż ta do asycio.

Tak że pewnie połowę zrobię po staremu, a tylko front po nowemu. WSGI ma się dobrze i raczej nieprędko przejdzie do lamusa.