pathos.multiprocessing을 사용하여 인스턴스 메서드를 사용해야하는 프로그램을 병렬 처리합니다. 여기에 최소한의 작업 예입니다키워드 목록을 pathos.multiprocessing에 전달하는 방법은 무엇입니까?
import time
import numpy as np
from pathos.multiprocessing import Pool, ProcessingPool, ThreadingPool
class dummy(object):
def __init__(self, arg, key1=None, key2=-11):
np.random.seed(arg)
randnum = np.random.randint(0, 5)
print 'Sleeping {} seconds'.format(randnum)
time.sleep(randnum)
self.value = arg
self.more1 = key1
self.more2 = key2
args = [0, 10, 20, 33, 82]
keys = ['key1', 'key2']
k1val = ['car', 'borg', 'syria', 'aurora', 'libera']
k2val = ['a', 'b', 'c', 'd', 'e']
allks = [dict(zip(keys, [k1val[i], k2val[i]])) for i in range(5)]
pool = ThreadingPool(4)
result = pool.map(dummy, args, k1val, k2val)
print [[r.value, r.more1, r.more2] for r in result]
인쇄 된 결과 (예상대로)입니다 :
Sleeping 4 seconds
Sleeping 1 seconds
Sleeping 3 seconds
Sleeping 4 seconds
Sleeping 3 seconds
[[0, 'car', 'a'], [10, 'borg', 'b'], [20, 'syria', 'c'], [33, 'aurora', 'd'], [82, 'libera', 'e']]
그러나 map
이 호출 마지막 두 인수 문제의 순서로, 그리고 내가 할 경우 :
result2 = pool.map(dummy, args, k2val, k1val)
I 입수 :
[[0, 'a', 'car'], [10, 'b', 'borg'], [20, 'c', 'syria'], [33, 'd', 'aurora'], [82, 'e', 'libera']]
나는 첫 번째 결과와 같은 것을 얻고 싶습니다. 이 동작은 표준 모듈 multiprocessing
에서 apply_async
kwds
이 수행 할 수있는 것과 동일합니다. 즉, 사전 목록을 전달합니다. 각 사전에서 키는 키워드 이름이고 항목은 키워드 인수입니다 (allks
참조). 표준 모듈 multiprocessing
은 인스턴스 메서드를 사용할 수 없으므로 최소 요구 사항조차 충족시키지 않습니다.
pathos
저자 해요
는 진심이 대형 개발에 시간과 노력을 넣어 주셔서 감사합니다' pathos'. 내 특정 문제를 해결하기위한 추가적인 명성. – astabada