5

Zaczynam szkicować strukturę witryny z serwisami informacyjno-finansowymi w języku Python (mam nadzieję, że 3.x) i doszedłem do wniosku - popraw mnie, jeśli " m źle - że będę musiał użyć zarówno biblioteki sieci zdarzeń, jak i biblioteki wieloprocesowej.Pytania dotyczące wielowątkowości i wieloprocesowości dla strony ilościowej

Jedną z części systemu jest po prostu praca cron, która działa w tle, bada rynek giełdowy i inne dane finansowe po zamknięciu rynku, wykonuje uczenie maszynowe i obliczenia ilościowe, a następnie umieszcza prognozy w prostej bazie danych lub nawet plik rozdzielany przecinkiem. (Argumenty są przekazywane między sekcjami systemu za pośrednictwem pliku.)

Rozumiem, że można użyć eventletu do niezablokowanych operacji wejścia/wyjścia, tak aby piękna zupa lub scrapy mogły zeskanować informacje z wielu witryn jednocześnie (sort) i biblioteka wieloprocesowa może umożliwić algorytmom uczenia maszynowego/kwantowym wykonywanie obliczeń wszystkich danych o stanie magazynowym równolegle jako oddzielnych procesów.

Aby wyświetlić prognozy, użytkownicy logowali się do drugiej części systemu zbudowanego za pomocą kolby, która miałaby dostęp do bazy danych i wyświetlała podpowiedzi.

Zakładam, że wszystkie te biblioteki i mieszane wątki/procedury wieloprocesowe są ze sobą zgodne? Mam zamiar używać pythonanywhere.com jako hosta i wydaje się, że ma sporo "baterii w zestawie". Oczywiście po zakończeniu testów prawdopodobnie będę musiał zwiększyć liczbę "pracowników", aby zasilić końcową wdrożoną stronę.

Jakieś pułapki w mieszaniu wątków i wieloprocesowości w czymś tak skomplikowanym?

+0

Nie można jednoznacznie odpowiedzieć na pytanie, jak ja nie próbowałem, że dokładnie, ale ogólnie jest w porządku, aby mieć wiele wątków i wiele procesów. – 101

+0

Nie jestem pewien, jak ściśle * gevent * jest związany z * zdarzeniem *, ale aby wesprzeć proces wieloprocesowy z * gevent *, gdy wątki są małpowane, musiałem użyć modułu * podprocesu * do komunikacji i * pikla * dla serializacja, ponieważ proces wieloprocesowy nie jest obsługiwany przez * gevent *. – cpburnz

+0

Deweloper PythonAnywhere tutaj. Jedną z rzeczy, o których musisz wiedzieć, że robisz to w PythonAnywhere, jest to, że ograniczamy wątki i procesy, które użytkownicy mogą uruchamiać, więc prawdopodobnie będziesz potrzebować puli wątków/procesów. Sądzę, że procesor wieloprocesorowy wbudował się. – Glenn

Odpowiedz

2

Zaledwie kilka ogólnych myśli, które nie mieściły się w sekcji komentarzy:

  1. scrapy ma już kilka sposobów przetwarzania concurrent żądania sieciowe za pośrednictwem skrętki. Oznacza to, że nie trzeba używać zdarzenia? Oczywiście zależy to od tego, jak dokładnie wykonujesz skrobanie/co dokładnie chcesz zeskrobać. Z tego, co wypróbowałem dawno temu (może jestem całkowicie w błędzie), jeśli mówisz, że potrzebujesz selenu, aby skrobać odpowiedzi javascript, to trudno to zrobić jednocześnie ze scrapy. Ale jeśli po prostu robisz żądania za pomocą urllib lub czegoś (np. Do API), to myślę, że wystarczy tylko scrapy.

  2. Zgadzam się z waszym komentarzem - część skrobania stron internetowych zawsze będzie podatna na błędy, więc zdecydowanie należy oddzielić skrobanie od części predykcyjnych. Musisz wziąć pod uwagę nieudane scrapy (np. Co zrobić, jeśli witryna nie działa, lub jeśli dostajesz błędne dane) i wyczyścić wszystkie dane przed wypchnięciem wyczyszczonych danych do własnej bazy danych, a następnie (oddzielnie) uruchomić komputer uczący się tych danych.

Ale ważną rzeczą jest to, że na pewno trzeba bazę danych pomiędzy skrobania i maszyny uczenia się (nie można po prostu przekazać je w pamięci lub poprzez csv jakbyś sugerowane). Powody niezliczone, kilka to:

  • zaoszczędzić na zadrapania (nie trzeba będzie pobranie kilku dni od danych za każdym razem, właśnie najnowsza dni)
  • daje kopii zapasowych i danych historycznych w przypadku, gdy strony internetowej Skrobaki nie są już dostępne (np. powiedzmy, że skrobisz ostatnie 365 dni - a jeśli twoje źródło informacji daje tylko ostatnie 365 dni, ale nagle potrzebujesz 700 dni?Chcesz zapisać dane z poprzednich skrobaczek gdzieś)
  • być dużo szybszym/lepszym/mniej flakey - posiadanie poprawnie indeksowanej bazy danych będzie prawdopodobnie równie ważne, jeśli nie ważniejsze niż jakikolwiek równoległy proces uczenia maszynowego algorytm.

także btw działania Django really well z scrapy ...

Powiązane problemy