Python многопоточная памятка - PullRequest
2 голосов
/ 17 января 2011

Python многопоточное запоминание, это возможно? Если да, то как?

1 Ответ

2 голосов
/ 17 января 2011

Конечно, это возможно.Фактически, я думаю, что простая однопоточная реализация должна работать просто отлично, предполагая, что допустимо, чтобы некоторые избыточные вычисления могли выполняться в случае, когда одна и та же функция вызывается с одинаковыми параметрами параллельно.

Для иллюстрации сценария ваша процедура запоминания, вероятно, будет выглядеть примерно так:

if args not in cache:
    cache[args] = func(args)
return cache[args]

Если два потока попадают в это место одновременно с одним и тем же args, они оба могут вызвать func(args) параллельно, в то время как было бы более эффективно вызывать только один экземпляр вычисления, а другой - ждать завершения первого.Это не может быть слишком большой проблемой для вас.Если это так, решение с использованием блокировок (из модуля threading) для блокировки потоков с совпадающими аргументами должно быть довольно простым.

...