Вы уверены, что разместили свой фактический код? Вы импортировали RegDevID из двух разных модулей:
# thread a
from UserShare import RegDevID
против
# thread b
from ShareVar import send_queue, RegDevID
В любом случае, ваш проблам не имеет ничего общего с потоками. Думайте о 'from somemodule import somevar' как о выражении присваивания. Примерно эквивалентно некоторой магии для загрузки модуля, если он еще не загружен, за которым следует:
somevar = sys.modules['somemodule'].somevar
Когда вы импортируете RegDevID из другого модуля, вы создаете новое имя в текущем модуле. Если вы мутируете объект, то другие пользователи объекта увидят изменения, но если вы перепривязаете имя в этом модуле, то это повлияет только на локальное имя, это ничего не изменит в исходном модуле.
Вместо этого вам нужно перепривязать переменную в другом модуле:
import ShareVar
...
ShareVar.RegDevID = data
За исключением, конечно, вы почувствуете себя намного лучше, если создадите класс для управления своим общим состоянием.
Ваш второй бит кода просто неправильно понимает локальные и глобальные переменные:
def SetVar(self):
RegDevID = 999
внутри функции вы создали новую локальную переменную RegDevID, которая не имеет ничего общего с глобальной переменной с тем же именем. Используйте оператор global
, если вы хотите привязать глобальную переменную:
def SetVar(self):
global RegDevID
RegDevID = 999