2013-10-31 11 views
12

पर अनपेक्षित रूप से छोड़ दिया गया है, मैंने एक समस्या में भाग लिया है, जहां पाइथन अनपेक्षित रूप से निकलता है, जब numpy के साथ मल्टीप्रोसेसिंग चलाता है। मैं इस समस्या को अलग किया गया है, ताकि अब मैं पुष्टि कर सकता बहु सही काम करता है कि जब कोड नीचे वर्णित चल:numpy के साथ मल्टीप्रोसेसिंग पायथन को ओएसएक्स

import numpy as np 
from multiprocessing import Pool, Process 
import time 
import cPickle as p 

def test(args): 
    x,i = args 
    if i == 2: 
     time.sleep(4) 
    arr = np.dot(x.T,x) 
    print i 

if __name__ == '__main__': 
    x = np.random.random(size=((2000,500))) 
    evaluations = [(x,i) for i in range(5)] 
    p = Pool() 
    p.map_async(test,evaluations) 
    p.close() 
    p.join() 

समस्या तब होती है जब मैं नीचे दिए गए कोड का मूल्यांकन करने का प्रयास करें। इससे पाइथन अप्रत्याशित रूप से बाहर निकलता है:

import numpy as np 
from multiprocessing import Pool, Process 
import time 
import cPickle as p 

def test(args): 
    x,i = args 
    if i == 2: 
     time.sleep(4) 
    arr = np.dot(x.T,x) 
    print i 

if __name__ == '__main__': 
    x = np.random.random(size=((2000,500))) 
    test((x,4)) # Added code 
    evaluations = [(x,i) for i in range(5)] 
    p = Pool() 
    p.map_async(test,evaluations) 
    p.close() 
    p.join() 

कृपया किसी की सहायता करें। मैं सभी सुझावों के लिए खुला हूं। धन्यवाद। नोट: मैंने दो अलग-अलग मशीनों की कोशिश की है और एक ही समस्या होती है।

+0

मैं WinPython का उपयोग कर Windows 7/64 बिट पर अपने कोड भाग गया। दोनों मामलों को त्रुटियों के बिना निष्पादित और बाहर निकला। – alandarev

+0

इसके लिए खेद है। दिलचस्प है कि यह विंडोज पर काम करता है। कोई ऐप्पल उपयोगकर्ता जो मुझे समझा सकता है ऐसा क्यों होता है? – Maal

+0

मैंने आपको "अप्रत्याशित" शब्द का उपयोग करके ऐप्पल के बारे में अपनी क्रोध-टिप्पणी करते समय, मुझे गुमराह किया होगा। मैं आपकी समस्या पर संदेह कर रहा हूं ओएस विशिष्ट है। क्या आप स्पष्ट पायथन के खिलाफ पोस्ट की गई स्क्रिप्ट को चलाने की कोशिश कर सकते हैं ताकि यह देखने के लिए कि समस्या बनी रहती है या नहीं? कुछ साफ और चलने योग्य कोड प्रदान करने के लिए – alandarev

उत्तर

5

मुझे समस्या का समाधान पता चला। समस्या तब होती है जब प्रारंभिक से पहले Numpy का उपयोग BLAS के साथ किया जाता है एक मल्टीप्रोसेसिंग उदाहरण। मेरा कामकाज केवल एक ही प्रक्रिया में बेवकूफ कोड (बीएलएएस चलाना) डालना है और फिर बाद में मल्टीप्रोसेसिंग उदाहरण चला रहा है। यह एक अच्छी कोडिंग शैली नहीं है, लेकिन यह काम करता है। नीचे दिए गए उदाहरण देखें: असफल हो जायेगी बाद

- अजगर छोड़ने देगा:

import numpy as np 
from multiprocessing import Pool, Process 

def test(x): 
    arr = np.dot(x.T,x) # On large matrices, this calc will use BLAS. 

if __name__ == '__main__': 
    x = np.random.random(size=((2000,500))) # Random matrix 
    test(x) 
    evaluations = [x for _ in range(5)] 
    p = Pool() 
    p.map_async(test,evaluations) # This is where Python will quit, because of the prior use of BLAS. 
    p.close() 
    p.join() 

के बाद सफल होगा:

import numpy as np 
from multiprocessing import Pool, Process 

def test(x): 
    arr = np.dot(x.T,x) # On large matrices, this calc will use BLAS. 

if __name__ == '__main__': 
    x = np.random.random(size=((2000,500))) # Random matrix 
    p = Process(target = test,args = (x,)) 
    p.start() 
    p.join() 
    evaluations = [x for _ in range(5)] 
    p = Pool() 
    p.map_async(test,evaluations) 
    p.close() 
    p.join() 
6

यह बहु और MacOS एक्स पर numpy के साथ एक ज्ञात मुद्दा है, और का डुप्लिकेट का एक सा है: इस सवाल का जवाब एक अलग अन्य BLAS उपयोग करने के लिए हो रहा है

segfault using numpy's lapack_lite with multiprocessing on osx, not linux

http://mail.scipy.org/pipermail/numpy-discussion/2012-August/063589.html

ऐप्पल को जोड़ने से ऐप्पल की तुलना में फ्रेमवर्क में तेजी आती है ... दुर्भाग्यपूर्ण :(

+2

जैसा कि @ogrisel ने पहले लिंक पर एक टिप्पणी में उल्लेख किया है, वहां मल्टीप्रोसेसिंग के नए संस्करणों में 'फोक्ससेवर' मोड भी है जो आसपास के आसपास काम कर सकता है मुसीबत। – Dougal

संबंधित मुद्दे