Đa xử lý trong Python với nhiều đối số (từ khóa) [trùng lặp]

Jan 11 2021

Tôi đang cố gắng lưu cùng lúc 2 tệp json trong đa xử lý. Đối với điều này đầu tiên tôi cần phải tuần tự hóa mảng. Khi tôi chỉ định cls=NumpyArrayEncodelớp trong argsđa xử lý thì tôi gặp lỗi vì chúng tôi không thể chỉ định cls=NumpyArrayEncodecó lẽ do =đăng nhập bằng argstrong đa xử lý.

Dưới đây là mã của tôi chỉ cho một quy trình. Đối với ý tưởng quy trình thứ hai là như nhau.

# 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. 

Làm cách nào để thêm cls=NumpyArrayEncodedưới dạng đối số trong đa xử lý?

Tìm kiếm đề xuất tử tế

Trả lời

1 sim Jan 11 2021 at 14:49

Hai tùy chọn: Sử dụng kwargstham số (xem multiprocessing.Processtài liệu để chuyển đối số từ khóa:

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

hoặc bạn sử dụng functools.partial:

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