Ich habe dieses Problem bei der Verwendung von Scrapys FifoDiskQueue
festgestellt. In Windows bewirkt FifoDiskQueue
, dass Verzeichnisse und Dateien von einem Dateideskriptor erstellt und von einem anderen Dateideskriptor konsumiert (und wenn keine weitere Nachricht in der Warteschlange entfernt wird).
Ich werde wie folgt zufällig Fehlermeldungen erhalten:
%Vor% In Windows bedeutet Fehler 5 Zugriff verweigert . Viele Erklärungen im Internet zitieren den Grund als fehlende administrative Rechte, wie zum Beispiel dieser MSDN-Beitrag . Der Grund hängt jedoch nicht mit den Zugriffsrechten zusammen. Wenn ich den Befehl scrapy crawl
in Administrator command prompt
ausführen, tritt das Problem weiterhin auf.
Ich habe dann einen kleinen Test wie diesen erstellt, um Windows und Linux zu versuchen:
%Vor%Wenn ich das hier ausführe, bekomme ich:
%Vor% Die round
ist jedes Mal anders. Also, wenn ich raise
am Ende entferne, bekomme ich etwas wie folgt:
Es scheitert einfach zufällig, mit einer geringen Wahrscheinlichkeit, NUR in Windows . Ich habe dieses Testskript in Cygwin und Linux versucht, dieser Fehler passiert nie dort. Ich habe auch den gleichen Code in einer anderen Windows-Maschine versucht und es tritt dort auf.
Was sind mögliche Gründe dafür?
[Aktualisierung] Screenshot des Beweises [管理员 bedeutet Administrator auf Chinesisch]:
Beweisen Sie auch, dass der Testfall in einer Administrator-Eingabeaufforderung weiterhin fehlschlägt:
@pss sagte, dass er das Problem nicht reproduzieren könnte. Ich habe unseren Windows 7 Server ausprobiert. Ich habe eine frische neue Python 2.7.10 64-Bit installiert. Ich musste eine wirklich große Obergrenze für Runde setzen und fing erst nach Runde 19963 an, Fehler zu sehen:
Kurz: Deaktivieren Sie die Antivirus- oder Indizierung von Dokumenten oder konfigurieren Sie sie zumindest so, dass Ihr Arbeitsverzeichnis nicht überprüft wird.
Lang: Sie können Monate damit verbringen, diese Art von Problem zu beheben . Die einzige Problemumgehung, bei der das Antivirenprogramm nicht deaktiviert wird, ist die Annahme, dass Sie nicht alle Dateien entfernen können Verzeichnisse.
Gehen Sie in Ihrem Code davon aus und versuchen Sie, beim Start des Diensts ein anderes Unterverzeichnis root zu verwenden, und versuchen Sie, die älteren zu bereinigen, wobei Sie die Fehler beim Entfernen ignorieren.