tôi có một mối quan tâm về multiprocessing.Manager() trong python, đây là ví dụ này,Làm thế nào để multiprocessing.Manager() làm việc trong python?
import multiprocessing
def f(ns):
ns.x *=10
ns.y *= 10
if __name__ == '__main__':
manager = multiprocessing.Manager()
ns = manager.Namespace()
ns.x = 1
ns.y = 2
print 'before', ns
p = multiprocessing.Process(target=f, args=(ns,))
p.start()
p.join()
print 'after', ns
và đầu ra là,
before Namespace(x=1, y=2)
after Namespace(x=10, y=20)
Đến nay, nó đã làm việc như mong đợi của tôi, sau đó tôi sửa đổi mã như thế này,
import multiprocessing
def f(ns):
ns.x.append(10)
ns.y.append(10)
if __name__ == '__main__':
manager = multiprocessing.Manager()
ns = manager.Namespace()
ns.x = []
ns.y = []
print 'before', ns
p = multiprocessing.Process(target=f, args=(ns,))
p.start()
p.join()
print 'after', ns
bây giờ, đầu ra là,
before Namespace(x=[], y=[])
after Namespace(x=[], y=[])
Nó làm tôi bối rối vì sao danh sách không thay đổi như mong đợi của tôi? ai cũng có thể giúp tôi tìm ra chuyện gì đã xảy ra? Cảm ơn trước!
Bắt đầu với 3.6, thay đổi đối với các đối tượng lồng nhau được truyền tự động. – max
Tôi đã gặp phải một số vấn đề khi sử dụng từ điển lồng nhau trong một NameSpace với Trình quản lý trên Python 3.6.4. Hãy chắc chắn rằng các đối tượng lồng nhau của bạn đang được cập nhật đúng cách trước khi tiến lên phía trước. Giải pháp cho tôi là xác định rõ ràng từng đối tượng được chia sẻ như một đối tượng Manager. – Joules