나는 풀 할당을 위해 파이썬에서이 동작을 알아 냈다. 풀에 20 개의 프로세스가 있지만 8 개의 프로세스에 대해 map_async를 수행 할 때 모든 프로세스를 실행하는 대신 4 개의 실행 만 얻습니다. 그 4 개가 끝나면 2 개를 더 보내고 그 중 2 개가 끝내면 1 개를 보냅니다.다중 처리 - 풀 할당
20 이상을 던지면 위의 동작이 반복 될 때 대기열에서 20 개 미만으로 시작될 때까지 20 개 모두 실행됩니다.
이것은 의도적으로 수행되었다고 가정하지만 이상하게 보입니다. 내 목표는 들어오는 즉시 요청을 처리하도록하는 것이고 분명히이 동작은 적합하지 않습니다.
maxtasksperchild 지원
내가 어떻게 향상시킬 수있는 어떤 아이디어에 대한 billiard와 파이썬 2.6을 사용하십니까?
코드 :
내가 함수 function()
를 사용하고자하는 데이터가 : 나는 파이썬에서 다중 처리
mypool = pool.Pool(processes=settings['num-processes'], initializer=StartChild, maxtasksperchild=10)
while True:
lines = DbData.GetAll()
if len(lines) > 0:
print 'Starting to process: ', len(lines), ' urls'
Res = mypool.map_async(RunChild, lines)
Returns = Res.get(None)
print 'Pool returns: ', idx, Returns
else:
time.sleep(0.5)
감사합니다. 덕분에 스크립트가 수정되었습니다. 나는 기본 풀 처리를 없애고 예제를 기반으로 내 자신을 구현했습니다. – SorinV