while 루프를 빠르게하려면 Python에서 다중 처리를 사용하고 싶습니다.조건부 for 루프의 병렬 처리/다중 처리
더 구체적으로는
저는 매트릭스 (샘플 * 기능)가 있습니다. 임의의 하위 집합의 특징 값이 특정 값 (이 경우 -1)과 같지 않은 x 개의 하위 집합을 선택하려고합니다.
내 일련 번호 :
np.random.seed(43)
datafile = '...'
df = pd.read_csv(datafile, sep=" ", nrows = 89)
no_feat = 500
no_samp = 5
no_trees = 5
i=0
iter=0
samples = np.zeros((no_trees, no_samp))
features = np.zeros((no_trees, no_feat))
while i < no_trees:
rand_feat = np.random.choice(df.shape[1], no_feat, replace=False)
iter_order = np.random.choice(df.shape[0], df.shape[0], replace=False)
samp_idx = []
a=0
#--------------
#how to run in parallel?
for j in iter_order:
pot_samp = df.iloc[j, rand_feat]
if len(np.where(pot_samp==-1)[0]) == 0:
samp_idx.append(j)
if len(samp_idx) == no_samp:
print a
break
a+=1
#--------------
if len(samp_idx) == no_samp:
samples[i,:] = samp_idx
features[i, :] = rand_feat
i+=1
iter+=1
if iter>1000: #break if subsets cannot be found
break
피팅 샘플을 검색 이론에 병렬로 실행할 수있는 가능성이 비싼 부분 (for 루프 J)이다. 어떤 경우에는, 충분히 큰 서브 세트를 찾기 위해 모든 샘플을 반복 할 필요가 없기 때문에, 서브 세트가 충분히 크자 마자 루프에서 빠져 나가는 이유가 있습니다.
나는 얼마나 많은 유효한 결과가 이미 생성되었는지를 확인할 수있는 구현을 찾기 위해 고심하고있다. 심지어 가능할까요?
전에 joblib
을 사용했습니다. 내가 올바르게 이해한다면 이것은 pool
멀티 프로세싱의 방법을 별도의 작업을 위해서만 작동하는 백엔드로 사용합니까? queues
이 도움이 될지 모르지만 지금까지는 구현에 실패했습니다.
: 나는 =하지만 많은)
내 코드를 배웠습니다. 나는 각 코어 당 하나의 프로세스를 실행하고, 공유 카운터를 생성하고, "잠금"에 의해 보호되거나 원자 정수로 구현되며, 특정 계수 (중복을 고려하여)에 도달 할 때까지 증가시킨 다음 모든 프로세스가 완료되고, 결과를 반환합니다. (아마도'apply_async()'를 사용하면된다). – advance512
@ advance512이 방법을 사용해 주셔서 감사합니다. – Dahlai