Задать вопрос
@nekolov

Как обьявить словарь с глобальной областью видимости в python и как вернуть массив словарей из потока?

Добрый день, у меня есть пару вопросов.

1. Мне требуется инициализировать массив словарей а после иметь возможность работать с ним в других функциях. Как это проще всего реализовать?
dict = []

def func():
    print('debug: ', dict)
    #При удалении ошибка так как словарь пуст.
    del dict[1]

def main():
    dict = [{'1':'2'}, {'2': '3'}]
    print(dict)

    func()
    print(dict)

if __name__ == "__main__":
    main()


2. Разбираюсь с потоками и столкнулся с проблемой, как я уже понял(и надеюсь верно) из потока возможно вернуть только простые типы данных, как быть если моя функция используемая в потоке возвращает словарь?
from threading import Thread

def my_func(i):
    return {'1' : i}

def main():
    thread_list = []
    thread_res = []

    for i in range(10):
       thread = Thread(target=my_func, args=(i,))
       thread.start()
       thread_list.append(thread)

    for thread in thread_list:
       thread_res.append(thread.join())
       print('result: ', thread.join())

if __name__ == "__main__":
    main()
  • Вопрос задан
  • 291 просмотр
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@FulTupFul
Поток возвращает объект. Будь то None, dict, list e.t.c. Вы можете в него прокинуть всё что угодно и вернуть всё что угодно.
НО, словарь это мутабельный объект питон, и вы не сможете предсказать, когда и где произошло изменение. Плюс словарь может хранить не потокобезопасный код.
Для потоков лучше использовать потокобезопасные очереди queue - https://docs.python.org/3/library/queue.html
upd: Ошибся с формулировочкой. Потоки не возращают значения. Но вы их можете записать в потокобезопасные структуры описанные выше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы