मैं सीख रहा हूं कि हाल ही में पाइथन मल्टीप्रोसेसिंग मॉड्यूल का उपयोग कैसे करें और आधिकारिक दस्तावेज़ पढ़ना। 16.6.1.2. Exchanging objects between processes में डेटा का आदान-प्रदान करने के लिए पाइप का उपयोग करने के बारे में एक सरल उदाहरण है।पायथन मल्टीप्रोसेसिंग पाइप आरईवी() डॉक्टर अस्पष्ट है या क्या मुझे कुछ याद आया?
और 16.6.2.4. Connection Objects में,, इस बयान है, उद्धृत "वृद्धि EOFError अगर वहाँ कुछ भी नहीं प्राप्त करने के लिए और दूसरे छोर बंद हो गया छोड़ दिया है।"
तो, मैंने नीचे दिखाए गए उदाहरण को संशोधित किया है। IMHO को EOFError अपवाद ट्रिगर करना चाहिए: कुछ भी नहीं भेजा गया है और भेजने का अंत बंद है।
संशोधित कोड:
from multiprocessing import Process, Pipe
def f(conn):
#conn.send([42, None, 'hello'])
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
#print parent_conn.recv() # prints "[42, None, 'hello']"
try:
print parent_conn.recv()
except EOFError:
pass
p.join()
लेकिन, जब मैं अपने उबंटू 11.04 मशीन, पायथन 2.7.2 पर संशोधित उदाहरण की कोशिश की, स्क्रिप्ट लटका।
यदि कोई मुझे बता सकता है कि मुझे क्या याद आया, तो मैं बहुत सराहना करता हूं।
कृपया निकालें "या बग है।" एक बग की संभावना लगभग शून्य है। संभावित स्पष्टीकरण पर ध्यान केंद्रित करें - गलत या अस्पष्ट दस्तावेज़ीकरण। –
@ एसएलॉट, आप सही थे। यह मेरी निगरानी है - बिलकुल भी नहीं। पाइथन के संदर्भ गिनती, और डुप्लेक्स पाइप का उपयोग करने का सबसे अच्छा अभ्यास के बारे में भूल गए। – user183394