def rotator(used):
index = random.randint(0,len(my_list)-1)
while my_list[index] in used:
index = random.randint(0,len(my_list)-1)
used
оно отсутствует, и когда все эти 4 процесса уже взяли какое-то значение только после этого оно добавляется в used
. Я показал вам пример как производить ротацию, что бы гарантировать то, что 2 процесса не будут обращаться к одному и тому-же объекту, нужно что бы этого объекта просто не было в списке. Вы можете играться с Lock, но тогда конкретно в вашем случае поток выполнения будет блокироваться пока 1 процесс не закончит операцию и только затем начнет обрабатывать следующий процесс. Абсурд, т.к. по сути вы превратите многопроцессорный-параллельный скрипт в многопроцессорный-последовательный. pop()
. Если элемента не будет в списке, то и взять его процесс не сможет =)pop()
, то будет ошибка IndexError
. manager.list()
создает самый обычный список, который вы можете шарить между процессами. Т.е. все, что вам нужно - это передать его в качестве аргумента нужной функции. Да, иногда возникает лапша с передачей подобных аргументов от функции к функции, что-бы достигнуть "цели", но это условность неуместного использования. Лучше делать подобные решения асинхронно, а если нужен именно процесс для обработки - запускать его в ProcessPoolExecutor. Когда задача завершается
{'name': 'Ivanov Aleksandr Sergeevich', 'f': 'I', 'n': 'A', 'p': 'S', 'age': '136', 'iq': 10}
только из Excel файла. А я не понимаю как. Именно из Excel.
Если exp - это datetime объект, то парсить его не нужно.
{'name': 'ivanov i', 'age': '26', 'etc': 'etc'}