Потому что вы используете не
потоки, а
процессы. У каждого процесса своё собственное окружение, соответственно переменные из
process_1
никак не пересекаются с переменными из
process_2
. Что-бы шарить данные между процессами нужно использовать
Manager.
Вот пример простенького ротатора:
from multiprocessing import Pool, Manager
def rotator(data_list):
data = data_list.pop(0)
data_list.append(data)
return data
def print_data(data_list):
data = rotator(data_list)
print(data)
if __name__ == "__main__":
manager = Manager()
data_list = manager.list()
for x in range(5):
data_list.append(x)
with Pool(4) as pool:
for _ in range(10):
pool.apply_async(print_data, [data_list])
pool.close()
pool.join()
Принцип простой как палка: есть список элементов, при обращении к методу первый доступный элемент удаляется из списка и добавляется в конец, что-бы следующий процесс не мог взять тот-же элемент и так по кругу.
Вот вывод:
0
1
2
3
4
0
1
2
3
4
Только учтите, что если процессы, как и потоки, стартуют в определенном порядке еще не означает, что в таком-же порядке они и завершат работу. Т.е. вполне нормально что процесс, который запустился 4м отработал на N-мс быстрее и завершился первым, в итоге вывод может быть таким:
4
2
0
1