Каков самый быстрый Perl IPC/очередь сообщений для единственной машины?

Функции только становятся методами во времени выполнения. Таким образом, когда Вы добираетесь C.f, Вы получаете связанную функцию (и C.f.im_class is C). В то время, когда Ваша функция определяется, это - просто простая функция, это не связывается ни с каким классом. Эта несвязанная и разъединенная функция - то, что украшено регистратором.

self.__class__.__name__ даст Вам название класса, но можно также использовать дескрипторы для выполнения этого несколько более общим способом. Этот шаблон описан в сообщении в блоге на Декораторах и Дескрипторах , и реализация Вашего декоратора регистратора в особенности была бы похожа:

class logger(object):
    def __init__(self, func):
        self.func = func
    def __get__(self, obj, type=None):
        return self.__class__(self.func.__get__(obj, type))
    def __call__(self, *args, **kw):
        print 'Entering %s' % self.func
        return self.func(*args, **kw)

class C(object):
    @logger
    def f(self, x, y):
        return x+y

C().f(1, 2)
# => Entering >

, Очевидно, вывод может быть улучшен (при помощи, например, getattr(self.func, 'im_class', None)), но этот общий шаблон будет работать и на методы и на функции. Однако это будет не работа для классов старого стиля (но просто не используйте тех;)

5
задан DavidBooth 31 July 2014 в 18:40
поделиться

1 ответ

Я не знаю о IPC :: Dirqueue или beanstalkd, но у меня был хороший успех с распространением (либо с Spread , либо Spread :: Message модулей). Легко выполнять несколько процессов (с запущенным другим демоном) и одновременно работать с несколькими машинами. Приятно то, что, поскольку он основан на группах, вы можете легко подключить другого слушателя, если хотите делать такие вещи, как ведение журнала, статистика или отладка без необходимости изменять (или замедлять) ваши процессоры.

3
ответ дан 15 December 2019 в 06:29
поделиться
Другие вопросы по тегам:

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