Как использовать словари с потоками?

Есть несколько потоков, задача которых получать входные данные из одного большого словаря, и записывать измененные данные в другой глобальный словарь. При этом каждый поток работает со своей частью первого большого словаря. Проблема заключается в том, что после завершения работы этих двух потоков оказывается, что длинна второго словаря меньше чем у первого, откуда потоки берут данные! Т.е потоки почему то не записывают данные во второй словарь, при этом не возникает ошибок.

from threading import RLock, Thread

lock = RLock()
first_big_dict = { some_elements }
second_big_dict = {}

def thread_func(array):
    with lock:
         item_name = getting_item_name()
         item_value = getting_item_value()

    do_something()

    with lock:
        second_big_dict[item_name] = item_value

thread1 = Thread(target=thread_func, args=(piece_of_first_big_dict,))
thread2 = Thread(target=thread_func, args=(second_piece_of_big_dict,))

thread1.start()
thread2.start()
thread1.join()
thread2.join()

Я работаю с CPython и примерно так выглядит мой код. Я использую lock чтобы останавливать другие потоки на время записи в глобальный словарь по информации из интернета, но это также не помогло. Как использовать глобальные словари с многопоточностью и как можно исправить мою проблему?


Ответы (0 шт):