Для браузеров, я согласен, что setTimeout и setInterval - это то, что нужно.
Но для серверного кода может потребоваться функция блокировки (например, чтобы вы могли эффективно синхронизировать потоки).
Если вы используете node.js и meteor, возможно, вы столкнулись с ограничениями использования setTimeout в волокне. Вот код для сна на стороне сервера.
var Fiber = require('fibers');
function sleep(ms) {
var fiber = Fiber.current;
setTimeout(function() {
fiber.run();
}, ms);
Fiber.yield();
}
Fiber(function() {
console.log('wait... ' + new Date);
sleep(1000);
console.log('ok... ' + new Date);
}).run();
console.log('back in main');
«Ленивый импорт» может быть построен поверх «перехватчиков импорта», указанных в PEP 302 , и теперь полностью реализован. PEP 369 раньше охватывал «ленивый импорт», а также постимпортные хуки, но с тех пор был упрощен и теперь охватывает только постимпортные хуки; тем не менее, вас может заинтересовать исходный черновик .
Хорошую реализацию «ленивого импорта» через ловушку meta_path
можно найти в этом рецепте .
Нет, я не думаю, что это полезно.
Зачем создавать функцию на лету для каждого атрибута , который вы пытаетесь получить из модуля? Меня это сбивает с толку. Похоже, что новые функции создаются с помощью магии, поэтому нужно глубоко изучить реализацию, чтобы понять, что происходит. И все это без синтаксических преимуществ.
И даже если у вас была для этого веская причина, зачем делать это с помощью модуля? Зачем регистрировать экземпляр класса в sys.modules
? Я думаю, что в python не одобряют отображение вещей такими, какими они не являются.
Если вы специально не запутываете код, я не понимаю, зачем все это делать.