के साथ पाइथन के मल्टीप्रोसेसिंग मॉड्यूल का उपयोग करके मैं उत्तल अनुकूलन के लिए 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 है पुन: पेश करने पर विवरण।
matplotlib 1.2.1 (। मैं ऐसा किया क्योंकि यह pylab, जो cvxopt उदाहरण स्क्रिप्ट के कई में प्रयोग किया जाता है शामिल हैं मैं अनिश्चित हूं कि अगर यह एक वास्तविक आवश्यकता है) स्थापित करें: इस तरह मैं cvxopt स्थापित है। मैंने this tar.gz package का उपयोग किया और इसे स्थापित करने के लिए
sudo python3 setup.py install
किया।स्थापित BLAS और एटलस
sudo apt-get install libblas-dev libblas3 libatlas-base-dev libatlas3-base libblas-test libopenblas-base libopenblas-dev
ऊपर शायद आवश्यकता से अधिक है, लेकिन मुझे लगता है कि यदि किसी भी समस्याओं के कारण होता है आश्चर्य होगा।
tar.gz पैकेज from here और
sudo python3 ./setup.py install
का उपयोग कर cvxopt 1.1.6 स्थापित किया गया।
यह अपने ओएस उल्लेख करने के लिए उपयोगी हो सकता है, और आप https://github.com/cvxopt/cvxopt/blob/master/INSTALL –
@ में सूचीबद्ध वैकल्पिक निर्भरता के किसी भी उपयोग कर रहे हैं कि क्या जैनकारिला नोट के लिए फिर से धन्यवाद। मैंने अब प्रश्न के बारे में अधिक जानकारी जोड़ दी है। – jogojapan