के साथ काम नहीं करता है यह this question जैसा ही है, लेकिन दिए गए समाधान (फ्रीज_support() को कॉल करना मेरे लिए काम नहीं करता है।पायथन 3.4 मल्टीप्रोसेसिंग py2exe
मेरे पास start.py नामक निम्न स्क्रिप्ट है जिसका उपयोग मैं py2exe (संस्करण 0.9.2.2) के साथ एक स्टैंडअलोन निष्पादन योग्य बनाने के लिए करता हूं। मेरे पास एक ही निर्देशिका में python.exe है।
import multiprocessing
def main():
print('Parent')
p = multiprocessing.Process(target=new_process)
multiprocessing.set_executable('python.exe')
p.start()
p.join()
def new_process():
print('Child')
if __name__ == '__main__':
multiprocessing.freeze_support()
main()
शुद्ध पायथन के रूप में चलाने पर यह पूरी तरह से ठीक काम करता है। हालांकि, जब एक निष्पादन योग्य के रूप में पैक, यह त्रुटि मैं मिलता है:
Unknown option: --
usage: <path to start.exe> [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
यह स्पष्ट रूप से बुला
python.exe --multiprocessing-fork
अगर मैं set_executable कॉल नहीं करते() और freeze_support (के कारण होता है), बाल प्रक्रिया सिर्फ exe शुरू होती है और __main__ के रूप में चलती है, जिससे "माता-पिता" प्रिंट करने के लिए नई प्रक्रियाओं की एक अंतहीन श्रृंखला होती है जबकि "चाइल्ड" कभी मुद्रित नहीं होता है।
केवल एक चीज freeze_support बुला() करने के लिए लगता है बच्चा प्रक्रिया निम्न त्रुटि को बढ़ाने के लिए अगर मैं multiprocessing.set_executable()
Traceback (most recent call last):
File "start.py", line 17, in <module>
multiprocessing.freeze_support()
File "C:\Python34\Lib\multiprocessing\context.py", line 148, in freeze_support
freeze_support()
File "C:\Python34\Lib\multiprocessing\spawn.py", line 67, in freeze_support
main()
NameError: name 'main' is not defined
कॉल नहीं करते मैं अजगर 3.4 32- उपयोग कर रहा हूँ कारण है विंडोज 8.1 64 बिट पर थोड़ा चल रहा है। मैंने एक ही परिणाम के साथ सीएक्स-फ्रीज का उपयोग कर उपर्युक्त सब कुछ करने की कोशिश की है। कोई भी सहायताकाफी प्रशंसनीय होगी।
संपादित करें: जब इस उदाहरण straight out of the docs का उपयोग कर:
from multiprocessing import Process, freeze_support
def f():
print('hello world!')
if __name__ == '__main__':
freeze_support()
Process(target=f).start()
मैं जब बच्चा प्रक्रिया freeze_support कॉल एक ही NameError मिल()।
multiprocessing.set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))
भी ध्यान रखें कि आप इस किसी भी नई प्रक्रियाओं को उत्पन्न करने से पहले कॉल करने की आवश्यकता:
मेरा टूल [pynsist] (http://pynsist.readthedocs.org/en/latest/) उपयोगी हो सकता है। यह आपके कोड को exe नहीं बनाता है, इसलिए आपको मल्टीप्रोसेसिंग कार्य करने के लिए किसी भी विशेष चाल की आवश्यकता नहीं है। यह एक इंस्टॉलर बनाता है जो आपके कोड के साथ ही पाइथन सेट करता है। –
मैं इसे पायथन 2.7.9 और py2exe 0.6.9 का उपयोग करके काम करने में सक्षम था, बशर्ते मैंने set_executable पर कॉल हटा दिया लेकिन अभी भी freeze_support() कहा जाता है। मेरा सबसे अच्छा अनुमान यह है कि freeze_support() पायथन 3 में ठीक से काम नहीं कर रहा है। – Mobious