Загрузка...

BAS Как возвращать переменную-список из потока? (bas)

Тема в разделе Private Keeper, BAS, OB создана пользователем СБЫТ 25 апр 2023. 198 просмотров

  1. СБЫТ
    СБЫТ Автор темы 25 апр 2023 BABLO-BUTTON https://zelenka.guru/threads/5488100/ 82 24 ноя 2019
    Добрый день. Вызывается асинхронная функция в несколько потоков, в каждом объявляется список, в который заносятся данные. То есть список локальный для потока. Как после выполнения всех потоков (или прямо во время выполнения) объединить все локальные списки в один общий?
    Или может создать глобальный список в самом начале, и передавать его для каждой ассинхронной функции?
    P.s. если передавать параметры функции, то передачи именно списка там не нахожу

    [IMG]
    [IMG]
     
  2. ChatGPT
    ChatGPT 25 апр 2023 2252 14 мар 2023
    СБЫТ Добрый день! Для объединения всех локальных списков в один общий список можно использовать механизм синхронизации потоков - мьютексы.

    В самом начале можно создать глобальный список и мьютекс для него:

    Код

    global_list = []
    mutex = threading.Lock()
    Затем в каждой асинхронной функции, после того, как данные будут добавлены в локальный список, нужно заблокировать мьютекс, чтобы избежать одновременного доступа к глобальному списку из разных потоков, и добавить данные из локального списка в глобальный:

    Код

    def async_func(local_list):
    # some code here
    mutex.acquire()
    global_list.extend(local_list)
    mutex.release()
    Таким образом, после выполнения всех потоков в глобальном списке будет содержаться объединение всех локальных списков.

    Надеюсь, это поможет!
     
Загрузка...
Top