Po prostu napotkałem problem z cvxopt package dla optymalizacji wypukłej, której nie znalazłem w documentation. Zastanawiam się, czy ktokolwiek wie, co go powoduje i jak najlepiej go obejść.Używanie wieloprocesorowego modułu Pythona razem z pakietem cvxopt
Problem polega na tym, że po import cvxopt
w programie Python, który korzysta z instancji multiprocessing.Process
, procesy nie mogą już działać równolegle. Wydają się automatycznie synchronizować. Zauważ, że dzieje się tak niezależnie od tego, czy którakolwiek z funkcji cvxopt
jest rzeczywiście używana przez program. Po prostu importowanie pakietu powoduje ten efekt.
przykład:
# import cvxopt
from multiprocessing import Queue, Process
def compute(queue):
"""
Pick integers from a queue and perform some useless
calculations on them just to keep the CPU busy.
"""
total = 0
while True:
item = queue.get()
if item is None:
break
for i in range(item):
total += i
if __name__ == '__main__':
queue = Queue()
procs = []
for i in range(4):
proc = Process(target = compute,
args = (queue,))
proc.start()
procs.append(proc)
for i in range(100000):
queue.put(i)
for proc in procs:
queue.put(None)
for proc in procs:
proc.join()
skrypt powyżej rozpoczyna się cztery procesy, rozciągających się równolegle do głównego programu. Na maszynie z czterema rdzeniami otrzymałem cztery procesy, z których każdy zajmuje 100% mocy procesora.
Jednak po odkomentowaniu instrukcji import cvxopt
na początku każdy proces kończy się, biorąc tylko 25% procesora, tak jakby był zsynchronizowany z innymi.
Jestem zainteresowany objaśnieniami i obejściami. Przepraszam, jeśli istnieje oczywiste wyjaśnienie w dokumentacji, którą przeoczyłem.
Szczegóły dotyczące sposobu odtworzenia problemu
Środowisko używam jest to pod Linux 3.5.0 (Ubuntu 12.10 dystrybucja) oraz Python 3.2.3. Jest to jak zainstalowałem cvxopt:
Install matplotlib 1.2.1 (Zrobiłem to, ponieważ zawiera pylab, który jest używany w wielu przykładowych skryptów cvxopt jestem pewien, czy to jest rzeczywiste zapotrzebowanie.). Użyłem this tar.gz package i zrobiłem
sudo python3 setup.py install
, aby go zainstalować.Zainstalowane BLAS i ATLAS
sudo apt-get install libblas-dev libblas3 libatlas-base-dev libatlas3-base libblas-test libopenblas-base libopenblas-dev
Powyższe jest prawdopodobnie bardziej niż jest to konieczne, ale byłbym zaskoczony, gdyby to powodowało problemy.
Zainstalowano cvxopt 1.1.6, używając pakietu tar.gz from here i
sudo python3 ./setup.py install
.
To może być pomocne wspomnieć systemu operacyjnego i czy używasz żadne dodatkowe zależności wymienionych w https://github.com/cvxopt/cvxopt/blob/master/INSTALL –
@ JanneKarila Jeszcze raz dziękuję za notatkę. Dodałem teraz więcej szczegółów do pytania. – jogojapan