Es gibt ein Nachfrageszenario, in dem Redis verwendet wird, um die Anzahl der Scrapy-Läufe zu steuern. Nachdem der Systemhintergrund auf 4 eingestellt wurde, kann Scrapy nur bis zu 4 Aufgaben starten, und überschüssige Aufgaben werden in die Warteschlange gestellt, um zu warten.
Ich habe kürzlich ein Django + Scrapy + Sellerie + Redis-Crawler-System erstellt. Zusätzlich zur Ausführung anderer Programme muss der vom Kunden erworbene Host auch die von mir entwickelten Programme ausführen, sodass eine manuelle Steuerung erforderlich ist die Anzahl der zu vermeidenden Scrapy-Instanzen. Zu viele Crawler belasten das System.
1. Die Crawler-Aufgabe wird vom Benutzer in Form einer Anfrage initiiert und alle Benutzeranforderungen werden einheitlich in die Warteschlange gestellt.
2 Die Ausführung der Aufgabennummer wird an Reids übergeben. Dies wird über Sellerie in Redis gespeichert, einschließlich der zum Starten des Crawlers erforderlichen Informationen. Rufen Sie die Anzahl der aktuell ausgeführten Crawler über die Scrapyd-Schnittstelle ab, um über den nächsten Schritt zu entscheiden : Wenn es weniger als 4 ist, holen Sie sich die entsprechende Menge an Informationen, um den Crawler zu starten. Wenn es größer oder gleich 4 ist, warten Sie weiter entsprechende Menge an Informationen von reids rechtzeitig, um den Crawler zu starten.
Code-Implementierung
Kleine Grube
Die Startgeschwindigkeit von Scrapy ist relativ langsam. Wenn der Code in der While-Schleife ausgeführt wird, um den Crawler zu starten, muss er eine Weile ruhen und dann die Anzahl der Crawler-Läufe über die Scrapyd-Schnittstelle ermitteln. Wenn es sofort gelesen wird, kann es zu Fehleinschätzungen kommen.Das obige ist der detaillierte Inhalt vonSo implementieren Sie gleichzeitige Warteschlangen basierend auf optimistischer Redis-Sperre. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!