나는 서로 독립적으로 해결되는 일련의 작업으로 구성된 난처하게 병렬화 가능한 문제를 가지고 있습니다. 각각의 작업을 해결하는 것은 꽤 길기 때문에 다중 처리의 주요 후보자입니다.파이썬 프로세스에서 객체 생성 및 재사용
문제는 내 작업을 해결하려면 자체적으로 시간이 많이 걸리지 만 모든 작업에 다시 사용할 수있는 특정 개체를 만들어야한다는 것입니다 (시작할 필요가있는 외부 바이너리 프로그램을 생각해보십시오). 따라서 직렬 내가 멀티를 사용하여이 프로그램을 병렬화 할 때 my_object
는 절인 할 수 없습니다 (이유에 대한 매개 변수로 전달 될 수 없습니다
def costly_function(task, my_object):
solution = solve_task_using_my_object
return solution
def solve_problem():
my_object = create_costly_object()
tasks = get_list_of_tasks()
all_solutions = [costly_function(task, my_object) for task in tasks]
return all_solutions
더 이상 실행하지 않아야 버전이 같은 일을 할 작업 동시에), 그래서 각 작업에 대한 개체의 별도 인스턴스를 만드는 리조트해야합니다 :
def costly_function(task):
my_object = create_costly_object()
solution = solve_task_using_my_object
return solution
def psolve_problem():
pool = multiprocessing.Pool()
tasks = get_list_of_tasks()
all_solutions = pool.map_async(costly_function, tasks)
return all_solutions.get()
이지만 복수 인스턴스를 작성하면 추가 비용이 my_object
이되므로이 코드는 직렬화 된 것보다 약간 더 빠릅니다.
각 프로세스에 my_object
이라는 별도 인스턴스를 만든 다음 해당 프로세스에서 실행되는 모든 작업에 대해 다시 사용할 수 있으면 내 타이밍이 크게 향상됩니다. 어떻게해야하는지에 대한 모든 포인터?
감사합니다. 샐러리가 멋지지만 내 목적을 위해 과도한 잔인 함, 메시징을위한 별도의 중개인 및 전체 앱 상용구가 저에게 과도한 비트입니다 ... – Javier