Используя именованные группы и таблицу отправки:
r = re.compile(r'(?P<cmd>foo|bar|baz)(?P<data>.+)')
def do_foo(data):
...
def do_bar(data):
...
def do_baz(data):
...
dispatch = {
'foo': do_foo,
'bar': do_bar,
'baz': do_baz,
}
m = r.match(var)
if m:
dispatch[m.group('cmd')](m.group('data'))
С определенным самоанализом можно автоматически сгенерировать regexp и таблицу отправки.
Оказывается, мое приложение фактически не тратя 65% своего времени на функцию mach_msg_trap
. Это была ошибка конфигурации инструментов с моей стороны.
Инструмент Sampler по умолчанию имеет значение All Sample Counts , это будет измерять все потоки независимо от их состояния.
Вместо этого переключитесь на Running Sample Время , которое будет отражать текущую фактическую рабочую нагрузку. Снимок экрана с инструментами http://developer.apple.com/library/mac/qa/qa2009/images/qa1619_running_sample_times.png[1217 visible
Если вы не ожидаете, что ваш основной поток будет делать что-либо, кроме ожидания в этом фоновом потоке (или ожидания ввода пользователя), беспокоиться не о чем - в вашем приложении просто ничего нет делать большую часть времени.
Если вы ожидаете, что основной поток будет активно делать что-то еще, обновите свой вопрос, чтобы описать это. В этом случае вам может потребоваться просмотреть полные стеки вызовов mach_msg_trap, поскольку они часто находятся в нижней части стека вызовов, где фактическое расточительство времени увеличивается.