2010-05-05 19 views
12

प्रिंट नहीं करेंगे मुझे नीचे दिए गए कोड के साथ समस्या है, और किसी भी कोड के साथ जो बच्चे प्रक्रियाओं में print फ़ंक्शन का उपयोग करता है। मैं print के बजाय sys.std[err|out].write('worker') का उपयोग करता हूं, भले ही मैं कोई मुद्रित बयान नहीं देख पा रहा हूं।पायथन मल्टीप्रोसेसिंग मॉड्यूल के साथ बनाई गई बाल प्रक्रिया

from multiprocessing import Process 

def f(name): 
    print 'hello', name 

if __name__ == '__main__': 
    p = Process(target=f, args=('bob',)) 
    p.start() 
    p.join() 

उत्पादन खाली है:

इस कोड (from the official python documentation) है।

नोट: निम्नलिखित कोड सूत्रण मॉड्यूल का उपयोग करता है और यह उत्पादन प्रिंट:

import threading 

def f(name): 
    print 'hello', name 

if __name__ == '__main__': 
    p = threading.Thread(target=f, args=('bob',)) 
    p.start() 
    p.join() 

आउटपुट: hello bob

आप कृपया मुझे समाधान को इंगित कर सकते हैं? अग्रिम में धन्यवाद।

उत्तर

19

इस प्रयास करें:

from multiprocessing import Process 
import sys 

def f(name): 
    print 'hello', name 
    sys.stdout.flush() 

... 

AFAIK की multiprocessing मॉड्यूल द्वारा पैदा की संसाधित मानक आउटपुट बफ़र जाता है, इसलिए आप उत्पादन केवल तभी बफर भरा हो जाता है या आप स्पष्ट रूप से फ्लश sys.stdout देखेंगे।

+0

धन्यवाद बहुत तमा, लेकिन यह मेरे मामले में काम नहीं किया ... – John

+0

आप किस मंच पर हैं? मैक ओएस एक्स पर उपरोक्त काम करता है; वास्तव में, यह sys.stdout flushing के बिना भी काम करता है। –

+1

तामा, जिस प्लेटफॉर्म पर मैं काम कर रहा हूं वह Win32 है। वैसे, अब तक मैंने आईडीएलई के भीतर कोड चलाने की कोशिश की। आज मैंने इसे वाक्यविन्यास का उपयोग करके कमांड लाइन से चलाने की कोशिश की: python.exe my_prog.py और यह काम किया। कोई जानता है क्यों? और मैं आईडीएलई के भीतर प्रोग्राम चलाकर प्रिंट आउटपुट कैसे प्रदर्शित कर सकता हूं? – John

3

मल्टीप्रोसेसिंग के लिए दस्तावेज़ स्पष्ट रूप से why समझाते हैं यह काम नहीं करेगा!

"नोट: इस पैकेज के भीतर कार्यक्षमता की आवश्यकता है कि __main__ विधि बच्चों द्वारा आयात योग्य हो। यह प्रोग्रामिंग दिशानिर्देशों में शामिल है, हालांकि यह यहां इंगित करने योग्य है। इसका मतलब है कि कुछ उदाहरण, जैसे मल्टीप्रोसेसिंग। पुल उदाहरण इंटरैक्टिव दुभाषिया में काम नहीं करते हैं। "

+0

पर सही उत्तर है उत्तर के लिए सबसे पहले धन्यवाद। मैंने "example.py" नाम की फ़ाइल में कोड लिखना और इसे चलाने के लिए F5 दबाएं। शायद इसका मतलब है "आईडीएलई के भीतर चल रहा कोड"? पीएस: मैं एक पाइथन नौसिखिया हूं, इसलिए किसी भी (अत्यधिक) स्पष्ट चीज़ के लिए खेद है, मैंने यहां बताया होगा। – John

+0

आह, अच्छी तरह से ">>" संकेत के साथ आईडीएलई एक इंटरैक्टिव दुभाषिया के रूप में मायने रखता है। इसलिए मल्टीप्रोसेसिंग मूल रूप से काम नहीं करेगी जबतक कि आप फ़ाइल में कोड नहीं लिखते हैं और F5 दबाते हैं या कमांड प्रॉम्प्ट में "python example.py" टाइप करते हैं। मैं समझ सकता हूं कि यह एक भ्रमित मुद्दा कैसे हो सकता है। आपका स्वागत है। – manifest

-2

पाइचर्म प्राप्त करें, मुझे एक ही त्रुटि थी, और + -5 घंटे के लिए इस पर काम किया। अंत में मुझे एनाकोंडा पर पिचर्म मिला और आउटपुट मिला। आईपीथॉन दुभाषिया के विंडोज संस्करण के साथ इसका कुछ संबंध है।

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