Python Skript schneller machen?


14.05.2022, 13:53

Was vielleicht auch noch hilfreich zu wissen ist, ist das die Server der API in Amerika stehen, dass ist schonmal ein Nachteil

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Gibt es Tipps, wie ich es vielleicht ein wenig beschleunigen kann? Auch wenn es in Python ist?
  • Miete dir einen Server, der in Amerika steht und hoste auf diesem dein Programm. Das würde allerdings nur dafür sorgen, dass dein Programm schneller an die Informationen kommt, nicht du.
  • Verringere den Timeout, um im Fehlerfall keine Zeit zu verlieren.
  • Schau, wie du den Response am schnellsten verwerten kannst. Wenn es sich bspw. um ein JSON-Format handelt, könnte eine Verarbeitung via Regex schneller sein, als den kompletten Response zu parsen. Sollte es notwendig sein, Informationen zu speichern, könnte es womöglich sinnvoll sein, dies nur in bestimmten Zeitintervallen durchzuführen und für die Zeit dazwischen ein anderes Ausgabemedium (wie die Konsole) zu wählen.
  • Schau dir concurrent.futures an. Aktionen können asynchron / parallel ausgeführt werden.
  • Wenn du die Möglichkeit hast, die API via HTTP aufzurufen (statt HTTPS), könntest du dir den Security Handshake sparen.
  • Generell macht es Sinn, sich auch einmal die Client-Implementation anzuschauen. Solltest du eine Bibliothek verwenden (grequests, httpx, requests, urllib3, ...), gibt es zu dieser womöglich bessere Optionen. Eine Recherche sollte helfen.
  • Recherchiere, wie viele API Requests pro Minute erlaubt sind. Stell sicher, das es kein Cooldown gibt, andernfalls gilt es diesen mit zu behandeln.
Was wäre die perfekte Programmiersprache für sowas um es so schnell wie möglich zu bekommen?

Eine Programmiersprache, die folgende Funktionalitäten bietet (sei es über Module der Standardbibliothek oder 3rd-Party-Software):

  • Parallelität oder Threading
  • Sockets sowie Implementationen für verschiedene Protokolle (wie HTTP/S)
  • Eine schnelle Verarbeitung von Zeichenketten
troloxi 
Fragesteller
 15.05.2022, 16:36

Ich benutze das Modul Requests. Die API kann maximal 120 mal pro Minute abgefragt werden, aber aktualisiert sich ca alle 60 sekunden, dann parse ich die JSON und ich lasse es dann in der Konsole ausgeben.

Regex wäre vielleicht wirklich eine Lösung um es etwas zu beschleunigen.

Wäre sowas wie CPP einer der besten Sprachen dafür? Ich habe mal gehört, dass jemand Rust für schnelle API Requests benutzt, nur ich weiß nicht, ob Rust da viel schneller als Python ist

0
regex9  16.05.2022, 03:51
@troloxi

Der wesentlichen Teil der Kommunikation liegt in der Strecke, die die Nachricht hin- und zurücklegen muss. Da ist es egal, ob du den Request nun via C, C++, Rust oder Fortan abschickst.

Eine größere Einflussmöglichkeit liegt bei der Datenvorbereitung und dem Lesen der Daten. Vielleicht macht eine HTTP-Kompression Sinn (Beispielimplementation). Ob die API dies auch auf ihrer Seite unterstützt, müsstest du nachschauen / testen. Auf Clientseite hast du dafür jedenfalls genügend Zeit (2 min), Beim Lesen wiederum kannst du schneller sein, indem du den Raw Response selbst liest oder statt requests die urllib3-Bibliothek verwendest.

Hinsichtlich Stringverarbeitungen ist Python schon gut aufgestellt. Wenn du unbedingt nach etwas anderem suchst, schau dir Golang an.

0
troloxi 
Fragesteller
 17.05.2022, 14:34
@regex9

Ich hatte auch überlegt, einen Server in den USA zu mieten, dort das Skript laufen lassen und dann an meinen PC senden, nur das würde von der Zeit doch fast kein Unterschied machen oder?

0
regex9  17.05.2022, 14:45
@troloxi

Nein, wie gesagt kommst du selbst so nicht schneller an die Informationen. Es würde sich hingegen lohnen, wenn die Daten direkt weiterverarbeitet werden sollen oder die eingelesene Information nur für die ersten n-Anfragen gültig ist. Beispiel: Seite A liefert Gutscheincodes, die von deinem Programm angefordert und dann bei Seite B eingelöst werden.

0

Wenn du eine API Request machst, hängt die Geschwindigkeit eher mit deinem Internet zusammen.

Ob du Geografisch näher am Server bist, Welche leitungen und Welchen ISP du hast etc.

Solltest du allerdings mehrere requests machen könnte dir Asyncio oder Threading/Multiprocessing helfen.

troloxi 
Fragesteller
 15.05.2022, 09:47

Wenn ich aber diese Daten dann noch auswerten lasse von Python, was z.B. niedriger ist als sonst, dann dauert das länger, auch wenn es nur ms sind, da haben andere dann einen Vorteil

0
grtgrt  18.10.2022, 18:07
@grtgrt

Lies auch: qu :    Wie sich Python mit C vergleicht

In Python geschriebener Code arbeitet um mindestens eine Größenordnung langsamer als in C geschriebener (genauer: um einen Faktor, der — je nach Aufgabe des Programms — irgendwo zwische 20 und 200 liegt).
0