На работе мы используем gevent для создания асинхронных серверов, и есть некоторые споры о том, когда нужно выполнять патч обезьяны по отношению к другим модулям. Документация gevent показывает такие вещи:gevent monkey patching order
from gevent import monkey
monkey.patch_socket()
import socket
Там, где происходит перехват обезьян, прежде чем библиотеки будут импортированы.
Однако, мой менеджер чувствует порядок обезьяны заплат должен быть так:
import socket
from gevent import monkey
monkey.patch_socket()
Где обезьяна латание вызывается после того, как модуль библиотеки импортируется. Это делает его похожим на патч обезьяны, который видит, что модуль сокета был импортирован и исправляет его в этот момент.
Я нашел несколько дискуссий, которые говорят об этом в одном направлении, и другие, которые говорят, чтобы сделать это другим. Мое собственное простое тестирование, похоже, говорит, что это неважно. Кто-нибудь имеет мнение по этому поводу, с некоторыми ясными причинами, почему, или ссылками, которые могли бы сказать, почему?
Спасибо заранее! Doug
Спасибо за «привкус вверх головой», я пару раз читал эту документацию и все еще путался из-за примеров, которые я видел в сети, которые делают это иначе. Должен был доверять документам. :) –
Hi Jason, Просьба пояснить, что не так с (Python 3.5.2 on linux) ** от gevent.monkey import patch_all; is_module_patched; patch_all(); импорт; is_module_patched (socket) ** => _False_ – dvska
'is_module_patched (modname)' принимает имя модуля *, а не сам модуль. –