Подскажите нубу - почему иногда при работе в нескольких потоках берутся одинаковые значения, хотя я специально проверяю их, чтобы избежать дублирования.
Т.е мне нужно иметь лист, который могут модифицировать все процессы. Перед выполнением задачи процесс лезет в список, берет оттуда элемент. Когда задача завершается - элемент возвращается в список и будет доступен другим процессам.
Ниже синтетический упрощенный пример. Но он отражает в какой-то мере суть.
import random
from multiprocessing import Pool
my_list = [1,2,3,4,5,6,7,8,9]
used = []
def test(i):
indx = random.randint(0,len(my_list)-1)
while my_list[indx] in used: #ищу элемент, который ранее не использовался
indx = random.randint(0,len(my_list)-1)
used.append(my_list[indx]) #добавляю элемент в список используемых, чтобы избежать повторного использования
print(my_list[indx]) #вывожу уникальный элемент на печать
with Pool(4) as p:
p.map(test, [1,2,3,4,5,6,7])
например , я получаю :
9
7
6
6
3
1
4
две 6 подряд ((((( Многопоточность, черт бы ее побрал )))))
Спасибо!