170 похожих чатов

Подскажите пожалуйста, есть ли способ шарить контекстные данные между базовым

тредом и всеми тредами, порожденными из него? Важное ограничение: нет возможности управлять созданием всех дочерних тредов.

Например сценарий такой:
1. В мейнтреде берем thread-0 из тредпула и запускаем в нём функцию foo().
2. В функции записываем данные в контекст. После этого вызываем функцию my_lib.bar() из сторонней библиотеки my_lib.
3. Функция my_lib.bar() создает thread-1 через создание экземпляра Thread и запускает в нём функцию check_context().
4. Функция check_context() запущенная в thread-1 должа напечатать данные из контекста, заданного выше в функции foo(), запущенной в thread-0.

Я экспериментировал с threading.local() и contextvars, но в обоих случаях контекст теряется при запуске thread-1, если thread-1 создаётся неконтролируемым нами способом.

8 ответов

7 просмотров

Выглядит как глобал

Vector- Автор вопроса
Denis Kalinochkin
Выглядит как глобал

global будет шариться еще и с другими тредами, например с тредом thread-8 и запущенным из него thread-9. А у них должно быть своё собственное значение контекста.

Звучит как "я не контролирую что у меня в коде происходит, но очень хочу костыль"

Почему бы просто не передать объекты со стейтом внутрь твоих тредов?

Vector- Автор вопроса
Tishka17
Почему бы просто не передать объекты со стейтом вн...

Потому что я не могу менять логику библиотеки my_lib из примера.

Vector
Потому что я не могу менять логику библиотеки my_l...

Так библиотека стартует свой код или твой?

Vector- Автор вопроса
Tishka17
Так библиотека стартует свой код или твой?

Если быть точнее, этот контекст должен быть доступен из фильтра логгера. Часть тредов логировать надо, а часть нет. Соответственно в фильтре я очень ограничен в средствах.

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

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Добрый день, чат. Мне в очередь из других RabbitMQ по shovel валятся метрики в формате текста для Prometheus. Помогите пожалуйста подружить RabbitMQ и Prometheus, чтобы он (...
Aleksey
4
@ahndmn @ayaw0_0 здарова, на чем пишете?
Aiwan \ (•◡•) / _bot
7
Карта сайта