2016-06-02 4 views
0

внутри основного скрипта python, с переменной точкой VAR, и в качестве стартового значения выполняется значение THR с переменной VAR.
в пределах THR есть бесконечный цикл, который печатает VAR каждые 500 ms.
Между тем главный скрипт сжимает еще несколько данных и обновляется VAR.python - потоковые и бесконечные петли

Как отразить изменение на THR, чтобы печатный результат также изменился, не убив его и не создав новый?

Это очень грубое упрощение кода, который у меня есть, но я бы предпочел читать и сфокусироваться на примере скелета, а не на моем конкретном случае.

EDIT: согласно запросу вот код я имею в виду

import threading 

VAR = 0 

def function(): 
    while True: 
     global VAR 
     while VAR == VAR: 
      print VAR 
      time.sleep(0.5) 

THR = threading.Thread(target=function) 
THR.start() 
time.sleep(1) 
function().VAR = 4 # this doesn't affect the output, only adds a seemingly random whitespace before it 
time.sleep(2) 
THR.VAR = 5 # nothing changes 
+2

Вставьте код пожалуйста. –

+1

Или лучше опубликуйте минимальный пример, который воспроизводит возникшую у вас ошибку/проблему. Что-то на самом деле не работает? Похоже, все должно быть в порядке. – syntonym

ответ

1

Вы должны использовать список с переменной внутри.

Если вы передадите список функции, вы сможете изменить значение первой позиции списка (вне функции), и в то же время вы увидите, как поток печатает правильное значение.

псевдокод:

(THREAD) 
    while True: 
     print list[0] 

(MAIN) 
    start_thread(list) 
    #modify value 
    list[0] = X 
+0

это было, безупречный. можете ли вы кратко объяснить, почему ** VAR ** необходимо обернуть в список для ** THR **, чтобы заметить это? – nxet

+0

Когда вы передаете переменную в Thread, она получает только значение VALUE, но если вы используете список, вы передадите адрес памяти (если значение изменится вне, оно тоже изменится внутри). –

+0

Хорошо! Большое спасибо человеку – nxet

Смежные вопросы