Rpy2, DiceKriging, Multiprocessing: Speicherleck

Um das R-Paket DiceKriging von Python mit Multiprocessing zu verwenden, habe ich so etwas wie das folgende Beispiel geschrieben.

Multiprocessing ermöglicht einen signifikanten Gewinn in der Zeit, hat aber die unerwartete Nebenwirkung der schnell zunehmenden Speicherverbrauch. Bei der Einstellung von flag_pool = False im folgenden Code (also nicht mit Multiprocessing) ist der Speicher stabil.

Ich habe versucht, sowohl Python- als auch R-Müllsammler (wie hier vorgeschlagen, hier und da ) ohne Erfolg zu verwenden.

Wie könnte das vermieden werden?

MWE:

 from multiprocessing import Pool import numpy as np from rpy2 import robjects robjects.r("library('DiceKriging')") # Generate data def model_to_emulate(X): return X[:, 0]**3 - X[:, 1]**2 X = np.random.random_sample((1000, 2)) z = model_to_emulate(X) list_arg = [[z, X]] * N_gp # Emulation flag_pool = True N_gp = 3 N_repetition = 3 def worker_km(response_design): response = response_design[0] robjects.globalenv["response"] = robjects.FloatVector(response) design = response_design[1] df = robjects.r["data.frame"]([robjects.FloatVector(column) for column in design.T]) df.names = ["x%d" % ii for ii in xrange(design.shape[1])] robjects.globalenv["design"] = df return robjects.r("fit = km(design=design, response=response," "covtype='matern5_2')") for _ in xrange(N_repetition): if flag_pool: print "==================== Using Pool." pool = Pool(N_gp) out = pool.map(worker_km, list_arg) pool.close() pool.join() else: print ">>>>>>>>>>>>>>>>>>>> Not using Pool." for response_design in list_arg: out = worker_km(response_design) # 

Bearbeiten: Ich benutze ubuntu 12.04.4, python 2.7.3, R 2.14.1 und rpy2 2.2.5.

Ich habe eine ähnliche Frage hier mit einer MWE gefragt, die leichter laufen soll.

  • Verwenden von heapy, um Speicherverluste in der Django app aufzuspüren
  • Speicherleck in Google ndb Bibliothek
  • Speicherleck beim Ausführen von Python im Mac OS Terminal
  • Python-Gedächtnisleck
  • Speicherverlust bei Verwendung von Strings <128KB in Python?
  • Speicherprofilierung / -überwachung (python) auf Google AppEngine
  • Python - Gedächtnis wird nicht an den Kernel zurückgegeben
  • Wie installiere ich die Behandlung unter python 2.7?
  • Finden Sie alle Verweise auf ein Objekt in Python
  • Gedächtnisleck in Python Verdreht: wo ist es?
  • Django Speicherverbrauch steigt mit jeder Anfrage
  • Python ist die beste Programmiersprache der Welt.