데이터 구조가 L
(목록, dict ... 일 수 있습니다.) 및 여러 프로세스를 읽어야합니다. 느리기 때문에 multiprocessing.Manager
을 사용하고 싶지 않습니다.파이썬 다중 처리 - 참조 된 객체는 언제 공유합니까? 언제 복사됩니까?
L
이 수정되지 않은 경우 internet은 copy-on-write 덕분에 자식 프로세스가 완전히 복사하지 않는다고 말했습니다. 그러나 객체가 a
에 의해 참조되는 경우 L
은 자체가 수정됩니까? copy-on-write는 여전히 적용됩니까? 예 : 모듈 a
와
from multiprocessing import Pool
from a import A
READONLYLIST = list(range(pow(10, 6))) # list will never be modified
a = A(READONLYLIST) # object a will be modified
def worker(x):
return a.worker(x)
print(Pool(2).map(worker, range(10)))
같이
이import random
class A(object):
def __init__(self, readonlylist):
self.readonlylist = readonlylist
self.v = 0
def worker(self, x):
self.v = random.random() # modify the object
return x + self.readonlylist[-1]
READONLYLIST
완전히이 경우 자식 프로세스로 복사 할 수 있습니까?
테스트하지는 않았지만 파이썬에서 copy-on-write 객체로 * anything *을 쓰면 레퍼런스 카운트가 변경 될 것이므로 복사 될 것입니다. – Blckknght
@Blckknght : 단순한 조회를 제외하고는 뭐죠? –