3
이 코드는 온라인에서 발견되었으며 예측 된 결과는 현재 처리중인 프로세스 이름을 표시하기로되어 있었지만 코드를 실행하면 결과 만 제공하고 이름은 제공하지 않습니다. 윈도우 7 파이썬 2.7.3을 실행하는 임.Python 다중 처리가 예상대로 작동하지 않습니다.
코드 :
import multiprocessing
def do_calculation(data):
return data * 2
def start_process():
print 'Starting', multiprocessing.current_process().name
if __name__ == '__main__':
inputs = list(range(10))
print 'Input :', inputs
builtin_outputs = map(do_calculation, inputs)
print 'Built-in:', builtin_outputs
pool_size = multiprocessing.cpu_count() * 2
pool = multiprocessing.Pool(processes=pool_size,
initializer=start_process,
)
pool_outputs = pool.map(do_calculation, inputs)
pool.close() # no more tasks
pool.join() # wrap up current tasks
print 'Pool :', pool_outputs
예상 결과 :
$ python multiprocessing_pool.py
Input : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Built-in: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Starting PoolWorker-11
Starting PoolWorker-12
Starting PoolWorker-13
Starting PoolWorker-14
Starting PoolWorker-15
Starting PoolWorker-16
Starting PoolWorker-1
Starting PoolWorker-2
Starting PoolWorker-3
Starting PoolWorker-4
Starting PoolWorker-5
Starting PoolWorker-8
Starting PoolWorker-9
Starting PoolWorker-6
Starting PoolWorker-10
Starting PoolWorker-7
Pool : [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
왜 그렇게 될 것으로 예상 했습니까? 붙여 넣은 출력이 표시된 코드와 관련하여 올바른 동작을하는 것처럼 보입니다. – Gian
제 생각에'do_calculation' 본문을'return (data * 2, multiprocessing.current_process() .name)'처럼 보이게하려면'data * 2'와 worker 이름을 튜플. – sberry
multiprocessing.cpu_count()가 반환하는 것을 확인해 보셨습니까? – fsw