Ich habe einen Python-Komponententest, der von multiprocessing
abhängt und daher nicht ausgeführt werden darf, wenn Gevents Affe-Patching aktiv ist. Gibt es eine Python-Anweisung, die mir sagen kann, ob gevent.monkey.patch_all
abgelaufen ist oder nicht?Wie kann ich feststellen, ob Gevents Affepatching aktiv ist?
Antwort
Ich bin nicht sicher, ob es ein idiomatischer Weg, aber eine einfache Möglichkeit wäre, die socket.socket
Klasse zu überprüfen:
import gevent.monkey, gevent.socket
gevent.monkey.patch_all()
import socket
if socket.socket is gevent.socket.socket:
print "gevent monkey patch has occurred"
afaik die gevent.monkey.saved
dict nur aktualisiert werden, wenn ein Element gepatcht ist, und das Original wird innerhalb des Diktats platziert (und bei Nichtübereinstimmung entfernt), z
Hallo Wes! Das ist eine gute Idee, aber ich werde die andere Antwort akzeptieren, weil sie auf Gevent 0.13 zurückgeht, während in Gevent 1.0 "gespeichert" erscheint. –
Wenn ich in 'monkey.saved.keys()' nach der Ausführung von 'monkey.patch_all()' nachschaue, denke ich nicht, dass der Schlüssel "sys" drin ist. Dies ist keine gültige Methode, um Affepatching zu erkennen. – Rockallite
Hier ist, was ich verwendet habe, um festzustellen, ob gevent Affe Patching aktiv ist.
def is_gevent_monkey_patched():
try:
from gevent import monkey
except ImportError:
return False
else:
return bool(monkey.saved)
Wie A. Jesse Jiryu Davis erwähnt, funktioniert dies nur GEVENT 1.0.x.
Aktualisiert: in gevent 1.1 gibt es an support API das ist hilfreich zu wissen, ob Objekte Affe-Patched wurden. So ist die Antwort für GEVENT 1.1 könnte sein:
def is_gevent_monkey_patched():
try:
from gevent import monkey
except ImportError:
return False
else:
return monkey.is_module_patched('__builtin__')
BTW, finde ich, dass monkey.is_module_patched('sys')
immer False
zurückgibt. Mit einem Blick in monkey.saved.keys()
nach monkey.patch_all()
läuft, denke ich nur die folgenden Module gültig sind zu überprüfen:
['_threading_local', '_gevent_saved_patch_all', 'socket', 'thread', 'ssl',
'signal', '__builtin__', 'subprocess', 'threading', 'time', 'os', 'select']
Danke, das ist eine nette Ergänzung. –
- 1. Wie kann ich feststellen, ob eine Sitzung aktiv ist?
- 2. Wie kann ich feststellen, ob Dispatcher.DisableProcessing aktiv ist?
- 3. Wie kann ich mit JavaScript/jQuery feststellen, ob der Benutzer gerade auf der Seite aktiv ist?
- 4. Wie kann ich feststellen, ob eine Transaktion in einem Java EE 6-Interceptor aktiv ist?
- 5. Wie kann ich feststellen, ob Java Sun/Oracle/OpenJDK ist?
- 6. Wie kann ich feststellen, ob scp von Perl verfügbar ist?
- 7. Wie kann ich feststellen, ob ein Benutzer angemeldet ist?
- 8. Wie kann ich feststellen, ob ein Outlook-Ordner öffentlich ist?
- 9. Wie kann ich feststellen, ob ein Polyeder konvex ist?
- 10. Wie kann ich feststellen, ob ein Dataset zFS ist
- 11. Wie kann ich feststellen, ob GreenHopper auf Jira installiert ist?
- 12. Wie kann ich feststellen, ob NSManagedObject gespeichert ist?
- 13. Wie kann ich feststellen, ob die Lautstärke stummgeschaltet ist?
- 14. Wie kann ich feststellen, ob eine C-Ganzzahlvariable signiert ist?
- 15. Wie kann ich feststellen, ob Python setuptools installiert ist?
- 16. Wie kann ich feststellen, ob die Benutzereingabe leer ist?
- 17. Wie kann ich feststellen, ob eine Rust-Bibliothek veraltet ist?
- 18. Wie kann ich feststellen, ob eine Datei leer ist?
- 19. Wie kann ich feststellen, ob ein Paket RTP/RTCP ist?
- 20. Wie kann ich feststellen, ob eine zusammengesetzte Formatzeichenfolge ungültig ist?
- 21. Wie kann ich feststellen, ob eine Datei gzip komprimiert ist?
- 22. Wie kann ich feststellen, ob ein ActiveX-Steuerelement geladen ist?
- 23. Wie kann ich feststellen, ob ein MySQL-Prozess blockiert ist?
- 24. Wie kann ich feststellen, ob ein Pthread am Leben ist?
- 25. Wie kann ich feststellen, ob .NET 3.5 SP1 installiert ist?
- 26. Wie kann ich feststellen, ob das Master-Volume stummgeschaltet ist?
- 27. Wie kann ich feststellen, ob eine Java-Ganzzahl null ist?
- 28. Wie kann ich feststellen, ob das cURL-Handle abgelaufen ist?
- 29. Wie kann ich feststellen, ob eine Java-Klasse abstrakt ist?
- 30. Wie kann ich feststellen, ob eine Klasse serialisiert werden kann?
nur einen leichten Vorschlag, der mehr pythonic Weg wäre: 'wenn socket.socket gevent.socket' ist –
@WesMason Danke, das ist gut. Es müsste sein, wenn socket.socket gevent.socket.socket ist. – Anorov