Possiedo un'interoperabilità Python che dipende da multiprocessing
e pertanto non deve essere eseguita quando la patch di scimmia di Gevent è attiva. C'è una dichiarazione Python che può dirmi se gevent.monkey.patch_all
è stato eseguito o no?Come posso rilevare se la patch di scimmia di Gevent è attiva?
risposta
io non sono sicuro che ci sia un modo idiomatico, ma un modo semplice sarebbe quello di controllare la classe socket.socket
:
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 il gevent.monkey.saved
dict viene aggiornata solo quando un elemento è patchato, e l'originale è posto all'interno del dict (e rimosso su unpatching), ad es
>>> from gevent.monkey import saved
>>> 'sys' in saved
True
Ciao Wes! Questa è una buona idea, ma accetterò l'altra risposta perché funziona a Gevent 0.13, mentre "salvato" è apparso in Gevent 1.0. –
Guardando in 'monkey.saved.keys()' dopo aver eseguito 'monkey.patch_all()', non penso che la chiave '" sys "' sia in essa. Questo non è un modo valido per rilevare le patch delle scimmie. – Rockallite
Ecco quello che ho usato per rilevare se gevent scimmia patch è attiva.
def is_gevent_monkey_patched():
try:
from gevent import monkey
except ImportError:
return False
else:
return bool(monkey.saved)
Come A. Jesse Jiryu Davis accennato, questo funziona solo per 1.0.x gevent.
Aggiornato: in gevent 1.1 c'è an support API che è utile sapere se gli oggetti sono stati scimmia-patched. Quindi la risposta per gevent 1.1 potrebbe essere:
def is_gevent_monkey_patched():
try:
from gevent import monkey
except ImportError:
return False
else:
return monkey.is_module_patched('__builtin__')
proposito, trovo che monkey.is_module_patched('sys')
restituisce sempre False
. Guardando in monkey.saved.keys()
dopo l'esecuzione monkey.patch_all()
, credo che solo i seguenti moduli sono validi per controllare:
['_threading_local', '_gevent_saved_patch_all', 'socket', 'thread', 'ssl',
'signal', '__builtin__', 'subprocess', 'threading', 'time', 'os', 'select']
Grazie, è una bella aggiunta. –
- 1. Per patch (scimmia) o non per patch (scimmia), questa è la domanda
- 2. jQuery webcam/flash: come rilevare se la webcam è attiva?
- 3. Come chiamare il metodo originale quando è patch-scimmia?
- 4. gevent patch-patching e punti di interruzione
- 5. Come posso fermare la follia scimmia?
- 6. Come posso rilevare se Dispatcher.DisableProcessing è attivo?
- 7. Come rilevare se la funzione di sincronizzazione chrome è attiva? - Chrome Extension
- 8. Come posso rilevare se la telecamera è limitata dall'utente
- 9. Se la patch della scimmia è permessa sia in Ruby che in Python, perché è più controversa in Ruby?
- 10. Ionic2 - verificare se la pagina è attiva
- 11. Utilizzando scimmia gevent patching con filettatura rende il lavoro filo serialmente
- 12. Come rilevare se la scheda di Chrome si è bloccata
- 13. come rilevare se la modalità di azione è già presente
- 14. Come verificare se la connessione MongoDB è attiva in Node.js
- 15. Come posso rilevare se l'utente è su localhost in PHP?
- 16. Android: come rilevare la trasmissione "Attiva memoria USB"?
- 17. come utilizzare la registrazione all'interno di Gevent?
- 18. Come posso rilevare se l'IDE Delphi specifico è in esecuzione?
- 19. Come posso rilevare se il volume è disattivato?
- 20. Come posso rilevare se la mia pagina è il risultato di un postback
- 21. patching scimmia Golang
- 22. Come posso rilevare se un iframe è stato caricato?
- 23. Come posso rilevare se un utente è lontano dalla tastiera?
- 24. Come posso rilevare se un prodotto firewall è abilitato?
- 25. come posso rilevare se window.location non è riuscito?
- 26. come scoprire se la sessione audio è attiva su iOS
- 27. Come utilizzare il metodo URI.parse di scimmia ruby
- 28. come rilevare se la variabile è una stringa
- 29. Come rilevare se la tastiera dell'utente è Swype?
- 30. Come può sapere un'estensione Safari se la modalità di navigazione privata è attiva?
solo un leggero suggerimento, il modo più divinatorio sarebbe: 'se socket.socket è gevent.socket' –
@WesMason Grazie, è buono. Dovrebbe essere 'se socket.socket è gevent.socket.socket' però. – Anorov