Не удается понять поведение потоков в python. Я было интересно о безопасности резьбы np.memmap(), и написал несколько примеров:Numpy memmap и несколько процессов
from multiprocessing import Process
import numpy as np
import time
mm = np.memmap("foo", dtype=int, mode = "w+", shape = (10,))
def foo(i):
while True:
mm[1]=np.random.randint(low=2, high=50)
sleepfor = np.random.uniform(low=0.0, high=1.1, size=None)
print "proces = ", i, " value = ", mm[1], " sleep = ", sleepfor
time.sleep(sleepfor)
if __name__ == "__main__":
processes = []
p1 = Process(target=foo, args=(1,))
p1.start()
p2 = Process(target=foo, args=(2,))
p2.start()
p3 = Process(target=foo, args=(3,))
p3.start()
p4 = Process(target=foo, args=(4,))
p4.start()
Он выводит это:
proces = 1 value = 13 sleep = 0.91652869794
proces = 2 value = 13 sleep = 0.91652869794
proces = 3 value = 13 sleep = 0.91652869794
proces = 4 value = 13 sleep = 0.91652869794
proces = 1 value = 6 sleep = 0.721062383299
proces = 2 value = 6 sleep = 0.721062383299
proces = 3 value = 6 sleep = 0.721062383299
proces = 4 value = 6 sleep = 0.721062383299
proces = 1 value = 24 sleep = 0.161040327399
proces = 2 value = 24 sleep = 0.161040327399
proces = 3 value = 24 sleep = 0.161040327399
proces = 4 value = 24 sleep = 0.161040327399
proces = 1 value = 22 sleep = 0.837121791675
proces = 2 value = 22 sleep = 0.837121791675
proces = 3 value = 22 sleep = 0.837121791675
proces = 4 value = 22 sleep = 0.837121791675
and so on...
Почему случайные значения одинаковы для разных процессов?
Почему они меняют каждые 4 итерации?
А также, как написать тест, чтобы проверить, если NumPy memmap потокобезопасен (это?)
UPD:
Ok, random.seed() решает вопрос номер один и номер два? Затем я прокомментировал sleep(), чтобы вызвать параллелизм записи, а также не было ошибок. Означает ли это, что np.memmap() поток безопасен?
Извините, почему голос? – kezzos
Я не голосовал. Это не я. – user3003873
Значения в порядке. Но я тоже старался сделать сон. Это же сталь. – user3003873