2011-01-17 10 views
2

Python Multithread Memoization, ist es möglich? Wenn das so ist, wie?Python Multithread Memoization

+9

Ja, es ist möglich. Was hast du bisher versucht? –

+0

Ja, es ist möglich, könnte Sperren und Warteschlangen umfassen, Suche nach Cache wird helfen. – TryPyPy

Antwort

2

Sicher ist es möglich. In der Tat denke ich, dass die einfache single-threaded Implementierung gut funktionieren sollte, vorausgesetzt, dass es akzeptabel ist, dass einige redundante Berechnungen in dem Fall ausgeführt werden können, wenn die gleiche Funktion mit den gleichen Parametern parallel aufgerufen wird.

Eine Abbildung des Szenarios wird Ihr memoization Verfahren wahrscheinlich so etwas wie folgt aussehen:

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

Wenn zwei Threads zur gleichen Zeit mit der gleichen args diesen Punkt getroffen, können sie beide func(args) parallel aufrufen , während es effizienter wäre, nur eine Instanz der Berechnung aufzurufen und die andere zu warten, bis die erste abgeschlossen ist. Das ist vielleicht kein großes Problem für Sie. Wenn dies der Fall ist, sollte eine Lösung, die Sperren (aus dem threading-Modul) verwendet, um Threads mit passenden Argumenten zu blockieren, ziemlich einfach sein.

+1

@gnibbler: Ich habe nichts versucht. Ich kam mit einem Freund ins Gespräch, der Memoization verwendete, um einige große KI-Berechnungen zu beschleunigen, fand aber, dass einige seiner Eingaben noch lange Zeit benötigen, um auf seinem Computer zu rechnen. Da es sich um einen Multicore-Computer handelt, schlug ich vor, dass er seine Anwendung multithreading-tauglich machen sollte und er war sich nicht sicher, ob er es schaffen würde, ohne seine Memo-Einträge zu verpfuschen. Aus Neugierde habe ich mich also entschieden, die Experten hier zu fragen, ob das überhaupt möglich sei. Scheint so, als ob ... die Leute in dieser Gemeinschaft mich immer wieder mit ihren Lösungen überraschen. :) – user578086