การประมวลผลหลายขั้นตอนใน Python ที่มีอาร์กิวเมนต์ (คีย์เวิร์ด) หลายรายการ [ซ้ำกัน]

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))