Mam bardzo proste przypadki, w których praca do wykonania może zostać rozbita i rozdzielona między pracowników. Próbowałem bardzo prosty przykład z here Multiprocessing:Ta sama wydajność dla różnych pracowników w procesie wieloprocesowym
import multiprocessing
import numpy as np
import time
def do_calculation(data):
rand=np.random.randint(10)
print data, rand
time.sleep(rand)
return data * 2
if __name__ == '__main__':
pool_size = multiprocessing.cpu_count() * 2
pool = multiprocessing.Pool(processes=pool_size)
inputs = list(range(10))
print 'Input :', inputs
pool_outputs = pool.map(do_calculation, inputs)
print 'Pool :', pool_outputs
Powyższy program wygeneruje następujące wyniki:
Input : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0 7
1 7
2 7
5 7
3 7
4 7
6 7
7 7
8 6
9 6
Pool : [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Dlaczego jest coraz drukowane taką samą liczbę losową? (Mam 4 procesory na moim komputerze). Czy to najlepszy/najprostszy sposób na kontynuowanie?
możliwe duplikat [używa pytona wieloprocesorowych o różnym nasienie losowo dla każdego procesu] (http://stackoverflow.com/questions/9209078/using-python-multiprocessing-with-different- random-seed-for-each-process) –
Czy nie ma możliwości ustawienia liczby losowej dla każdego procesu, który może wykorzystywać liczby losowe? Powiedzmy, że używa się modułu losowego, numpy, scipy, tensorflow i kto wie co jeszcze. Czy jest to jedyny sposób, aby upewnić się, że proces ma inny losowy materiał siewny, aby przejść przez każdy z nich i ręcznie ustawić stan? –