0

ich versuche einen Web-Service zu implementieren, die 10000 + Anfrage auf Facebook Graph API benötigen würde,Multithreading Vs asynchrone Programmierung für eine Million Anfrage an Facebook Graph API (in Django)

sollte machen werden, um dies getan mit Multithreading wie dies - What is the fastest way to send 100,000 HTTP requests in Python?

Oder

mit asynchroner Programmierung mit asyncio wie this- http://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html

Welche wäre die bessere Wahl und warum ??

Antwort

0

In erster Linie scheinen über 10000 Anfragen ein wenig übertrieben, besonders für einen einzelnen Endpunkt. Wenn Sie sich für eine niedrigere Zahl entscheiden und es Ihnen nichts ausmacht, gleichzeitige Anfragen zu sammeln, sollte Sellerie eine gute Lösung in Verbindung mit Django sein. Es gibt auch ein Dienstprogramm namens Flower, das hilft, Sellerie zu verwalten. Eine andere gute Option ist Crochet (ein Twisted-Projekt) Ich habe es schon mit Flask benutzt und es hat gut funktioniert. Ihr tatsächlicher begrenzender Faktor wird sein, wie viele offene Dateideskriptoren (dh offene Sockets) Ihr Betriebssystem unterstützt und wie viel Speicher Sie haben.

Soweit Async vs Threads, ist dies ein Kaninchen Loch, das stark abhängig ist, wen Sie fragen. Die meisten werden sich für einen Threaded-Ansatz entscheiden, da es einfacher ist, aufzustehen (anfangs) und aus welchen Gründen auch immer, Threads sind für den menschlichen Verstand (anfänglich) sinnvoller. Async funktioniert hervorragend, wenn Sie Funktionen haben, die schnell Ergebnisse liefern, aber die gesamte App verlangsamen, wenn eine Funktion zu lange dauert oder nicht richtig entwickelt wurde. Mit sorgfältiger Gestaltung können Async und Threads beide zu schnellen Ergebnissen führen. Allerdings bin ich der Meinung, dass Sie wirklich beide Async und Threads benötigen, um die Nachteile von einander auszugleichen. Das beste Design-Muster, das ich gefunden habe, ist die Verwendung von Async (Twisted) für den Großteil der Arbeit und für bestimmte Aufgaben, die länger dauern und die Ereignisschleife blockieren, führe ich diese in einem Thread durch (auch von Twisted verwaltet). Abschließend sei angemerkt, dass jede Art von Async- oder Threaded-Anwendungen extreme Sorgfalt und Geduld beim Entwerfen erfordert, denn genau wie in der realen Welt können mehrere Dinge gleichzeitig Probleme verursachen.

Verbindungen