클래스 인스턴스 목록이 있습니다. 이 클래스 객체 각각에는 실행하려는 메소드 함수가 있으며 많은 클래스 인스턴스가 있기 때문에 클래스 인스턴스 전체에서 병렬 처리하려고합니다. 예를 들어,이 클래스 객체가 있습니다 클래스 인스턴스 목록을 다중 처리로 전달합니다. 각 클래스의 메소드 실행중인 함수를 병렬 처리하고 병렬 처리합니다.
class Person(object):
def __init__(self, name):
self.name = name
def register(self):
self.registered = True
지금 내가 사람의 값에 걸쳐
Person.register()
방법 기능의 실행을 병렬화 할
Person()
persons = [Person(i) for i in ["Bernard", "Enrik", "Joseph"]]
의 클래스 인스턴스의 목록을 정의했다. 다중 처리 사용 .Pool, 여기 내가 한 일. 메서드 함수를 피클 할 수 없으므로 다른 함수로 래핑합니다.
import multiprocessing as mp
def reg(person):
person.register()
pool = mp.Pool(processes=mp.cpu_count()//2)
res = list(pool.map(reg, persons))
코드는 그래서 지금은 목록에있는 모든 사람의 인스턴스가 True
에 속성 registered
설정을해야합니다하지만 각 클래스의 인스턴스를 확인할 때,이 속성을 포함하지 않는 것을 기대하고, 그런데 오류없이 실행 registered
. 예를 들어, registered
이 persons [0]의 속성인지 확인하면,
hasattr(persons[0], "registered")
>>> False
왜 이런가요? 이 문제를 어떻게 해결할 수 있습니까?
지도가 있습니다. 좋은 시작입니다. 이제 컨테이너에서 수집하고 행복하게. 'list (map (reg, persons))'가 모든'Person's에 대한 속성을 설정할 것입니다.) – Uvar
당신은 내가 넣어야 함을 의미합니까? 'Person.register()'의 return 문과'list (pool.map (reg, persons)) '가 주어지면 각 클래스 객체에'registered' 속성을 명시 적으로 할당하는 또 다른 함수를 실행해야합니까? – bninopaul