पायथन में मल्टीप्रोसेसिंग मल्टीपल (कीवर्ड) तर्क के साथ [डुप्लिकेट]

Jan 11 2021

मैं एक ही समय में 2 json फ़ाइलों को मल्टीप्रोसेसिंग में सहेजने की कोशिश कर रहा हूं। इसके लिए पहले मुझे सरणी को क्रमबद्ध करना होगा। जब मैं मल्टीप्रोसेसिंग cls=NumpyArrayEncodeमें क्लास असाइन करता हूं argsतो मुझे त्रुटि हो रही है क्योंकि हम मल्टीप्रोसेसिंग में cls=NumpyArrayEncodeसमान =साइन के कारण असाइन नहीं कर सकते हैं args

नीचे केवल एक प्रक्रिया के लिए मेरा कोड है। दूसरी प्रक्रिया के लिए विचार समान है।

# json serialization
class NumpyArrayEncode(JSONEncoder):
    def default(self, o):
        if isinstance(o, np.ndarray):
            returno.tolist()
        return JSONEncoder.default(self, o)

json_data = np.array([[3, 5, 6], [8, 12, 6]]) # example

with open('test.json', 'w') as fn:
    p1 = multiprocessing.Process(target = json.dump, args=(json_data, fn, cls=NumpyArrayEncode)) # here is problem that we can't add equal `=` sign in `args` in multiprocessing. 

cls=NumpyArrayEncodeमल्टीप्रोसेसिंग में तर्क के रूप में कैसे जोड़ें ?

तरह के सुझाव के लिए देख रहे हैं

जवाब

1 sim Jan 11 2021 at 14:49

दो विकल्प: kwargsपैरामीटर का उपयोग करें ( कीवर्ड तर्कों को पारित करने के लिए multiprocessing.Processदस्तावेज़ देखें) :

multiprocessing.Process(target=json.dump,
                        args=(json_data, fn),
                        kwargs={"cls": NumpyArrayEncoder})

या आप का उपयोग करें functools.partial:

multiprocessing.Process(target=functools.partial(json.dump, cls=NumpyArrayEncoder),
                        args=(json_data, fn))