2017-04-11 2 views
0

나는, 이론적으로, 같은 시간에 어떻게 다중 통화 기능을 테스트 할 :파이썬 Multiproccess 동시에 실행되지 않습니다 내가 추적 코드가있는 경우 별도로

import multiprocessing as mp 
import time 
import numpy as np 


def worker(word_id): 
    print('hello, my word id is {}'.format(word_id)) 
    a = np.random.randint(0, 10) 
    print(a, 'id {}'.format(word_id)) 
    if 6 < a < 10: 
     time.sleep(4) 
     print('hello again, id {}'.format(word_id)) 
    elif 3 < a < 6: 
     time.sleep(3) 
     print('hello once more, id {}'.format(word_id)) 
    else: 
     time.sleep(1) 
     print('hi, id {}'.format(word_id)) 


def main(): 
    process = [mp.Process(target=worker, args=[i]) for i in range(5)] 
    for p in process: 
     p.start() 
    for p in process: 
     p.join() 

if __name__ == '__main__': 
    main() 

내가 실행할 때, 5 개 공정 것 작업자 함수를 별도로 호출하고이를 증명하기 위해 작업자에서 생성되는 무작위 값은 무작위입니다. 분명히 나는 ​​그것이 동시에 실행하거나하지 않을 경우 모두 같은, 내가 말할 수없는 설정 한 임의의 값을

hello, my word id is 0 
2 id 0 
hello, my word id is 1 
2 id 1 
hello, my word id is 2 
2 id 2 
hello, my word id is 3 
2 id 3 
hello, my word id is 4 
2 id 4 
hi, id 3 
hi, id 0 
hi, id 1 
hi, id 2 
hi, id 4 

:

그러나 난 그냥이 같은 동일한 값을 가지고? 아무도 그것을 분석하고 나에게 Python에서 다중 프로세스의 올바른 사용법을 줄 수 있습니다. (어쩌면 그것은 내 코드가 잘못되었습니다), 내 perpose 동시에 args 함께 함수를 실행하고 어떤 프로세스가 완료 알고 싶습니다.

답변

1

multiprocessing을 사용하면 각 프로세스가 상위 상태를 상속합니다. 여기에는 난수 생성기의 상태가 포함됩니다. 쉬운 해결책은 각 근로자에게 처음에 한 번 random.seed()으로 전화하는 것입니다. 시스템에서 시드를 위해 시스템 시간을 사용하지만 예를 들어 잘 작동하는 경우 실패 할 수 있습니다. 어디서 운영 체제에서 씨앗을 얻을 리눅스.

+0

답장을 보내 주신다면, random.random()은 실제로 임의의 값을 별도로 생성 할 수 있습니다. 왜 numpy하지 않는지 모르겠다. –

+0

'다중 처리 '는'random.seed()'자체를 호출하는 것으로 보입니다. Numpy에 대해 동일한 작업을 수행해야합니다. (Numpy는 여기에 약간의 관계가 있습니다.) –

+0

tnks, 몇 가지 실험을하겠습니다. –