जब विंडोज और लिनक्स (दोनों python2.7 के साथ)क्यों multiprocessing.Process खिड़कियों और वैश्विक वस्तु और समारोह तर्क
'''import_mock.py'''
to_mock = None
'''test.py'''
import import_mock
from multiprocessing import Process
class A(object):
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
def __getstate__(self):
print '__getstate__'
return { 'a': self.a, 'b': self.b,
'c':0 }
def func():
import_mock.to_mock = 1
a = A()
return a
def func1(a):
print a.a, a.b, a.c
print import_mock.to_mock
if __name__ == '__main__':
a = func()
p = Process(target=func1, args=(a,))
p.start()
p.join()
खिड़कियों पर पर चल निम्नलिखित कोड अलग आउटपुट है के लिए लिनक्स पर अलग ढंग से व्यवहार , उत्पादन होता है:
__getstate__
1 2 0
None
कौन सा मेरी अपेक्षा
पर है लिनक्स, यह है:
1 2 3
1
जो वैश्विक वस्तु और पारित तर्कों को क्लोन नहीं करता है।
मेरा सवाल यह है कि वे अलग-अलग व्यवहार क्यों करते हैं? और लिनक्स कोड को विंडोज़ के समान कैसे व्यवहार करना है?
क्योंकि चीजें दो ओएस पर अलग-अलग लागू होती हैं। दस्तावेज़ों का उल्लेख है कि विंडोज़ पर मल्टीप्रोसेसिंग से कई प्रकारों को पिकलेबल करने की आवश्यकता है ताकि बाल प्रक्रियाएं उनका उपयोग कर सकें। निहितार्थ यह है कि अन्य ओएस पर उन्हें होना जरूरी नहीं है। [इस अनुभाग] (https://docs.python.org/2/library/multiprocessing.html#logging) 'मल्टीप्रोसेसिंग' मॉड्यूल के दस्तावेज़ में लॉगिंग पर आपकी विशिष्ट समस्या से मदद मिल सकती है। – martineau