我有一個Python單元測試,取決於multiprocessing
,因此在Gevent的monkey-patching處於活動狀態時不能運行。是否有Python語句可以告訴我gevent.monkey.patch_all
是否已運行?如何檢測Gevent的猴子修補是否處於活動狀態?
回答
我不知道有一個慣用的方式,但一個簡單的方法是檢查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"
據我所知,當一個項目被修補的gevent.monkey.saved
字典只更新,和原來的被放置在字典中(並且在未修補時被移除),例如
>>> from gevent.monkey import saved
>>> 'sys' in saved
True
嗨,韋斯!這是一個好主意,但我會接受其他答案,因爲它可以回到Gevent 0.13,而「保存」出現在Gevent 1.0中。 –
通過運行'monkey.patch_all()'後查看'monkey.saved.keys()',我不認爲''sys''鍵在它裏面。這不是檢測猴子修補的有效方法。 – Rockallite
以下是我用於檢測gevent猴子修補程序是否處於活動狀態。
def is_gevent_monkey_patched():
try:
from gevent import monkey
except ImportError:
return False
else:
return bool(monkey.saved)
如前所述A. Jesse Jiryu Davis,這適用於僅GEVENT 1.0.x的。
更新:在gevent 1.1有an support API這有助於知道對象是否已被猴子修補。因此,對於GEVENT 1.1的答案可能是:
def is_gevent_monkey_patched():
try:
from gevent import monkey
except ImportError:
return False
else:
return monkey.is_module_patched('__builtin__')
BTW,我發現monkey.is_module_patched('sys')
總是返回False
。通過觀察monkey.saved.keys()
運行monkey.patch_all()
後,我認爲只有以下模塊是有效的檢查:
['_threading_local', '_gevent_saved_patch_all', 'socket', 'thread', 'ssl',
'signal', '__builtin__', 'subprocess', 'threading', 'time', 'os', 'select']
謝謝,這是一個很好的補充。 –
- 1. CherryPy,Multiprocessing和Gevent猴子修補程序
- 2. 如何檢測QDialog.exec()是否處於活動狀態
- 3. 如何檢測Dispatcher.DisableProcessing是否處於活動狀態?
- 4. 哪些功能是由gunicorn gevent worker修補的猴子?
- 5. android檢測對話框是否處於活動狀態?
- 6. Salesforce:檢查ApexTrigger是否在測試中處於活動狀態
- 7. Facebook API - 檢測會話是否處於活動狀態或未處於活動狀態
- 8. 如何檢查變送器是否處於活動狀態?
- 9. 如何通過PHP檢查JavaScript是否處於活動狀態?
- 10. 如何檢查CMS塊是否處於活動狀態?
- 11. 如何檢查AmazonS3Client連接是否處於活動狀態
- 12. 如何檢查服務器是否處於活動狀態?(c#)
- 13. PDO:如何檢查連接是否處於活動狀態?
- 14. 您如何檢測到Ruby中發生了猴子修補?
- 15. gevent猴子補丁破解gevent.sleep(0)?
- 16. gevent猴子補丁和斷點
- 17. 如何檢測MARS是否在當前連接上處於活動狀態?
- 18. 如何檢測HTML文本字段是否處於活動狀態?
- 19. 如何在析構函數中檢測異常是否處於活動狀態?
- 20. 猴子修補子類
- 21. 如何通過猴子修補
- 22. 如何猴子修補節點對象?
- 23. PyQt猴子修補QLineEdit.paste?
- 24. alias_method_chain和猴子修補
- 25. 在PHP中修補猴子
- 26. Python猴子修補程序
- 27. 猴子修補和調度
- 28. 測試前窗是否處於活動狀態
- 29. 檢查它是否處於活動狀態
只是一個輕微的建議,更Python的方式應該是:'如果socket.socket是gevent.socket' –
@WesMason謝謝,那很好。不過,它必須是'如果socket.socket是gevent.socket.socket'。 – Anorov