Автозагрузка в Python

Для браузеров, я согласен, что 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');

См .: https://github.com/laverdet/node-fibers#sleep

16
задан JJJ 6 May 2017 в 08:28
поделиться

2 ответа

«Ленивый импорт» может быть построен поверх «перехватчиков импорта», указанных в PEP 302 , и теперь полностью реализован. PEP 369 раньше охватывал «ленивый импорт», а также постимпортные хуки, но с тех пор был упрощен и теперь охватывает только постимпортные хуки; тем не менее, вас может заинтересовать исходный черновик .

Хорошую реализацию «ленивого импорта» через ловушку meta_path можно найти в этом рецепте .

10
ответ дан 30 November 2019 в 23:14
поделиться

Нет, я не думаю, что это полезно.

Зачем создавать функцию на лету для каждого атрибута , который вы пытаетесь получить из модуля? Меня это сбивает с толку. Похоже, что новые функции создаются с помощью магии, поэтому нужно глубоко изучить реализацию, чтобы понять, что происходит. И все это без синтаксических преимуществ.

И даже если у вас была для этого веская причина, зачем делать это с помощью модуля? Зачем регистрировать экземпляр класса в sys.modules ? Я думаю, что в python не одобряют отображение вещей такими, какими они не являются.

Если вы специально не запутываете код, я не понимаю, зачем все это делать.

-1
ответ дан 30 November 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: