Найти - Пользователи
Полная версия: Обновление переменной
Начало » Python для новичков » Обновление переменной
1
Bastard34
Доброго времени суток. Сильно не пинайте, Питон изучаю первый день.

Собственно, вопрос такой - как обновлять (ну например, раз в 30 секунд) переменную в коде?

Суть такая - парсим JSON, берем оттуда переменную (в моем случае nowplay ) - используем эту переменную для вывода на LCD дисплей. Сейчас все работает. Но данные в JSON меняются. Хотелось бы каждые 30 секунд получать эту переменную nowplay и обновлять вывод на экране

Код сейчас такой:
 import urllib, json, time
url = "ТУТ URL"
response = urllib.urlopen(url)
data = json.loads(response.read())
nowplay = data['current']['name']
framebuffer = ['STATUS: OK!','',]
def write_to_lcd(lcd, framebuffer, num_cols):
    lcd.home()
    for row in framebuffer:
        lcd.write_string(row.ljust(num_cols)[:num_cols])
        lcd.write_string('\r\n')
 
from RPLCD.i2c import CharLCD
lcd = CharLCD(i2c_expander='PCF8574', address=0x27, port=1,cols=20, rows=4, dotsize=8, charmap='A00', auto_linebreaks=True)
write_to_lcd(lcd, framebuffer, 16)
long_string = nowplay
for i in range(len(long_string) - 16 + 1):
    framebuffer[1] = long_string[i:i+16]
    write_to_lcd(lcd, framebuffer, 16)
    time.sleep(0.2)
def loop_string(string, lcd, framebuffer, row, num_cols, delay=0.2):
    padding = ' ' * num_cols
    s = padding + string + padding
    for i in range(len(s) - num_cols + 1):
        framebuffer[row] = s[i:i+num_cols]
        write_to_lcd(lcd, framebuffer, num_cols)
        time.sleep(delay)
 
 
while True:
    loop_string(long_string, lcd, framebuffer, 1, 16)
Загоняю цикл получения JSON в while с time.sleep (30) - данные берет каждые 30 секун, но текст перестает “бегать по экрану”, т.е. перестает работать
 while True:
    loop_string(long_string, lcd, framebuffer, 1, 16)
P.S. Постарался объяснить как можно проще…не ругайте, если совсем нифика не понятно

Код, при котором данные обновляются раз в 30 секунд, но при этом текст перестает “бегать”
 # -*- coding: utf-8 -*-
import urllib, json, time, sys
from RPLCD.i2c import CharLCD
lcd = CharLCD(i2c_expander='PCF8574', address=0x27, port=1,cols=16, rows=2, dotsize=8,charmap='A00',auto_linebreaks=True)
def my_except_hook(exctype, value, traceback):
    if exctype == KeyboardInterrupt:
        time.sleep(2)
        lcd.close(clear=True)
        lcd.backlight_enabled = False
    else:
        sys.__excepthook__(exctype, value, traceback)
sys.excepthook = my_except_hook
while True:
    url = "тут URL"
    response = urllib.urlopen(url)
    data = json.loads(response.read())
    nowplay = data['current']['name']
    print("Данные получены")
    framebuffer = ['STATUS: OK!','',]
    def write_to_lcd(lcd, framebuffer, num_cols):
        lcd.home()
        for row in framebuffer:
            lcd.write_string(row.ljust(num_cols)[:num_cols])
            lcd.write_string('\r\n')
 
 
    write_to_lcd(lcd, framebuffer, 16)
    #import time
    long_string = nowplay
    for i in range(len(long_string) - 16 + 1):
        framebuffer[1] = long_string[i:i+16]
        write_to_lcd(lcd, framebuffer, 16)
        time.sleep(0.2)
    def loop_string(string, lcd, framebuffer, row, num_cols, delay=0.2):
        padding = ' ' * num_cols
        s = padding + string + padding
        for i in range(len(s) - num_cols + 1):
            framebuffer[row] = s[i:i+num_cols]
            write_to_lcd(lcd, framebuffer, num_cols)
            time.sleep(delay)
 
 
        while True:
            loop_string(long_string, lcd, framebuffer, 1, 16)
 
    time.sleep(30)
 
marvellik
Bastard34
ну у вас вся оставшаяся часть кода ожидает паузу. парсите и обновляйте переменную в параллельном потоке с паузой а основной код вывода пусть работает без паузы
Bastard34
marvellik
Bastard34ну у вас вся оставшаяся часть кода ожидает паузу. парсите и обновляйте переменную в параллельном потоке с паузой а основной код вывода пусть работает без паузы
Огромадное Вам спасибо. До потоков еще не доучил. И до меня дошла моя ошибка )))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB