Pracuję nad dostawcą interfejsu WWW/API, który pobiera dane w czasie rzeczywistym z interfejsu API innej firmy, umieszcza je w bazie danych MySQL i udostępnia za pośrednictwem interfejsu API HTTP/JSON.Zdarzenie/ogólna asynchronizacja zadań we/wy
Dostarczam API z kolbą i współpracuję z DB przy użyciu SQLAlchemy Core.
Dla części pobierającej dane w czasie rzeczywistym, mam funkcje, które owijają API strony trzeciej, wysyłając żądanie, parsując zwrócone xml do dyktatora Pythona i zwracając go. Nazwiemy te owijki API.
Następnie wywołuję te funkcje w ramach innych metod, które pobierają odpowiednie dane, w razie potrzeby przetwarzam je (np. Konwersje strefy czasowej itp.) I umieszczam je w bazie danych. Nazwiemy te procesory.
Właśnie czytałem o asynchronicznych I/O i wydarzeniu specjalnie i jestem pod wrażeniem.
zamierzam włączyć go w moich danych kod chwytanie, ale mam kilka pytań pierwsze:
jest to bezpieczne dla mnie małpa plastra wszystkiego? biorąc pod uwagę, że mam flakon, SQLAlchemy i kilka innych bibliotek, czy są jakieś minusy łatania małp (zakładając, że nie ma późnego wiązania)?
Jaka jest szczegółowość, na którą powinienem podzielić swoje zadania? Myślałem o stworzeniu puli, która okresowo spawnuje procesory. Następnie, gdy procesor dojdzie do części, w której wywoła on owijki API, wrappery API uruchomią GreenPile, aby uzyskać aktualne dane HTTP za pomocą eventlet.green.urllib2. Czy to dobre podejście?
- Limity czasowe - chcę się upewnić, że żadne greenthreads nigdy się nie zawiesi. Czy to dobre podejście do ustawiania zdarzenia. Czas do 10-15 sekund na każde greenthread?
FYI, mam około 10 różnych zestawów danych w czasie rzeczywistym, a procesor jest odradzany co ~ 5-10 sekund.
Dzięki!
dzięki za komentarz. Zgadzam się, aby nie mieszać Flask i Async I/O - nie musiało to być jasne z mojego pytania, ale API (Flask) działa na oddzielnym, niezlepionym, nie asynchronicznym procesie We/Wy. Grabger danych działa w procesie załatania, zapisując do db przy użyciu SQLAlchemy Core (nie ORM) tylko dla uproszczenia. – user1094786
OK, w takim przypadku już to robisz w ten sposób. Zastanawiam się jednak, czy naprawdę potrzebujesz asynchronizacji dla grabbera danych. Może być lepiej z innymi metodami współbieżności (wieloprocesorowość, seler, itp.), Zwłaszcza jeśli twój grabber danych jest intensywnie wykorzystujący procesor. –
+1 dla selera. Zadanie wygląda na to, że jest dobrym kandydatem. – Tisho