2013-06-17 5 views
5

के साथ पाइथन के मल्टीप्रोसेसिंग मॉड्यूल का उपयोग करके मैं उत्तल अनुकूलन के लिए cvxopt package के साथ एक समस्या आई, जिसे मैंने documentation में उल्लिखित नहीं पाया। मुझे आश्चर्य है कि अगर कोई जानता है कि इसका कारण क्या है और इसके आसपास कैसे काम करना है।सीवीक्सोपेट पैकेज

समस्या यह है कि जब आप import cvxopt एक पायथन प्रोग्राम में multiprocessing.Process उदाहरणों का उपयोग करते हैं, तो प्रक्रियाएं समानांतर में नहीं चल सकती हैं। वे स्वचालित रूप से सिंक्रनाइज़ हो जाते हैं। ध्यान दें कि इस पर ध्यान दिए बिना कि cvxopt कार्यों में से कोई भी वास्तव में प्रोग्राम द्वारा उपयोग किया जाता है या नहीं। बस पैकेज आयात करना इस प्रभाव का कारण बनता है।

उदाहरण:

# 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() 

स्क्रिप्ट ऊपर चार प्रक्रियाओं मुख्य कार्यक्रम के लिए समानांतर में चल शुरू होता है। चार कोर वाले मशीन पर मुझे चार प्रक्रियाएं मिलीं, प्रत्येक एक सीपीयू का 100% ले रहा था।

हालांकि, शुरुआत में import cvxopt कथन को असम्बद्ध करते समय, प्रत्येक प्रक्रिया केवल CPU का 25% लेती है, जैसे कि यह दूसरों के साथ सिंक्रनाइज़ होती है।

मुझे दोनों स्पष्टीकरण और कार्य-आसपास में रुचि है। अगर मैं प्रलेखन में स्पष्ट स्पष्टीकरण देता हूं तो मैं क्षमा चाहता हूं।


कैसे समस्या

पर्यावरण मैं इस के तहत चल रहा लिनक्स 3.5.0 (उबंटू 12.10 वितरण), और अजगर 3.2.3 है पुन: पेश करने पर विवरण।

  1. matplotlib 1.2.1 (। मैं ऐसा किया क्योंकि यह pylab, जो cvxopt उदाहरण स्क्रिप्ट के कई में प्रयोग किया जाता है शामिल हैं मैं अनिश्चित हूं कि अगर यह एक वास्तविक आवश्यकता है) स्थापित करें: इस तरह मैं cvxopt स्थापित है। मैंने this tar.gz package का उपयोग किया और इसे स्थापित करने के लिए sudo python3 setup.py install किया।

  2. स्थापित BLAS और एटलस

    sudo apt-get install libblas-dev libblas3 libatlas-base-dev libatlas3-base libblas-test libopenblas-base libopenblas-dev 
    

    ऊपर शायद आवश्यकता से अधिक है, लेकिन मुझे लगता है कि यदि किसी भी समस्याओं के कारण होता है आश्चर्य होगा।

  3. tar.gz पैकेज from here और sudo python3 ./setup.py install का उपयोग कर cvxopt 1.1.6 स्थापित किया गया।

+1

यह अपने ओएस उल्लेख करने के लिए उपयोगी हो सकता है, और आप https://github.com/cvxopt/cvxopt/blob/master/INSTALL –

+0

@ में सूचीबद्ध वैकल्पिक निर्भरता के किसी भी उपयोग कर रहे हैं कि क्या जैनकारिला नोट के लिए फिर से धन्यवाद। मैंने अब प्रश्न के बारे में अधिक जानकारी जोड़ दी है। – jogojapan

उत्तर

1

शायद पाइथन जीआईएल के साथ कुछ करने के लिए जारी नहीं किया जा सकता है?

देखें: http://comments.gmane.org/gmane.comp.python.scientific.user/15678

+0

इसके साथ कुछ करने के लिए हो सकता है, लेकिन मैं इसे बेहतर समझना चाहता हूं। जहां तक ​​मुझे 'मल्टीप्रोसेसिंग' मॉड्यूल पता है ('थ्रेडिंग' मॉड्यूल के विपरीत) जीआईएल से सीधे प्रभावित नहीं होना चाहिए। – jogojapan