Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 14.02.2021
Сообщений: 11

Плавающая ошибка при передаче данных через GET на сайт. Не пойму где ошибка!

24.06.2021, 14:28. Показов 1386. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Пилю свой маленький проект “умного дома”(для себя). Столкнулся с проблемой: есть скрипт, который принимает данные из requests.get() и записывает их в файл. Данные передаются с параметрами, которые берутся из глобальных переменных. requests.get находится в потоке и блокирует доступ к переменным Rlock, когда с ними работает. Также есть к этим переменным доступ из других потоков (тоже с RLock) для их считывания или обновления. Потоки вызываются из GUI и они все демоны. Вопрос: все работает нормально какое-то время, данные отправляются и пишутся в файлы на хостинге, но потом почему-то начинают отправляться requests.get() без данных. Почему так происходит? При этом ошибок программа не выдает. Прошу сильно не пинать - я самоучка и мне уже далеко не 20 лет, так что мозги могут соображать не так быстро как у молодежи или профессиональных программистов.Заранее спасибо.
Собственно файл с функцией start1 в которой и формируется и отправляется requests.get():

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import threading
from threading import Thread
from time import sleep
import requests
from package1_copy import Variables
lock = threading.RLock()
def start1():
   lock.acquire()
   try:
    r4_0 = Variables.parsing_GPIO_4relay1
    r4_1 = str(r4_0[0])
    r4_2 = str(r4_0[1])
    r4_3 = str(r4_0[2])
    r4_4 = str(r4_0[3])
    params = {'params': str(Variables.parsing_ESP1),
              'params1': str(Variables.Sadok_Light1),
              'params2_1': r4_1,
              'params2_2': r4_2,
              'params2_3': r4_3,
              'params2_4': r4_4, 'control': 'home'}
    r = requests.get('http://some_site/index.php', params=params)
    r.encoding = "UTF8"
    print('start1 = Ok')
    print(r.text)
   except:
    params = {'params': '0', 'params1': '0', 'params2_1': '0', 'params2_2': '0', 'params2_3': '0', 'params2_4': '0', 'control': 'home'}
    r = requests.get('http://some_site/index.php', params=params)
    r.encoding = "UTF8"
    print('except start1' + r.text)
    pass
   finally:
       lock.release()
   sleep(60.0)
   start1()
def start2():
  global lines
  lock.acquire()
  try:
    url = "http://some_site/hello.html"
    r = requests.get(url)
    r.encoding = "UTF8"
    print('start2 = Ok')
    with open('response_server.html', 'w') as output_file:
      output_file.write(r.text)
    with open('response_server.txt', 'w') as output_file:
      output_file.write(r.text)
    text_file = open("response_server.html", "r")
    lines = text_file.read().split(',')
    print(lines)
    # print(len(lines))
    text_file.close()
    Variables.receive_from_server = lines
    Variables.receive_from_server1 = lines[0]
    Variables.receive_from_server1 = lines[1]
    Variables.receive_from_server1 = lines[2]
    Variables.receive_from_server1 = lines[3]
    Variables.receive_from_server1 = lines[4]
    Variables.receive_from_server1 = lines[5]
    Variables.receive_from_server1 = lines[6]
  except:
    lines.append('0')
    pass
  finally:
      lock.release()
  sleep(70.0)
  start2()
  return lines
def parsing_ESP():
  lock.acquire()
  try:
    url = "http://192.168.0.110/sensors/adci1/"
    r = requests.get(url)
    r.encoding = "UTF8"
    # print('r.text= ' + r.text)
    with open('test.html', 'w') as output_file:
      output_file.write(r.text)
    with open('test1.txt', 'w') as output_file:
      output_file.write(r.text)
    f = open('test1.txt')
    str1=f.read()
    f.close()
    str2=str1[str1.find(";") + 1 : ]
    str3=str2[str2.find(":") + 1 : str2.find(";")]
    Variables.parsing_ESP = int(str3)
    Variables.parsing_ESP1 = int(str3)
    print('parsing_ESP = Ok')
  except:
    url= 'http://192.168.0.110/configrst?st=1'
    r.request.get(url)
    str3=110
    Variables.parsing_ESP = int(str3)
    Variables.parsing_ESP1 = int(str3)
    pass
  finally:
      lock.release()
  sleep(60.0)
  parsing_ESP()
  return str3
def parsing_GPIO_Sadok():
  lock.acquire()
  try:
    url = "http://192.168.0.100/gpioprint"
    r = requests.get(url)
    r.encoding = "UTF8"
    with open('sadok.html', 'w') as output_file:
      output_file.write(r.text)
    with open('sadok1.txt', 'w') as output_file:
      output_file.write(r.text)
    f = open('sadok1.txt')
    str_sad = f.read()
    # print(str_sad)
    f.close()
    str_sad2 = str_sad[:str_sad.find(";") + 1]
    str_sad3 = str_sad2[str_sad2.find(":") + 1: str_sad2.find(";")]
    Variables.Sadok_Light=str_sad3
    Variables.Sadok_Light1 = str_sad3
    print('parsing_GPIO_Sadok = Ok ')
  except:
    str_sad3=1
    Variables.Sadok_Light = str_sad3
    Variables.Sadok_Light1 = str_sad3
    pass
  finally:
      lock.release()
  sleep(30.0)
  parsing_GPIO_Sadok()
  return str_sad3
def parsing_GPIO_4relay11():
  lock.acquire()
  try:
    url = "http://192.168.0.120/gpioprint"
    r = requests.get(url)
    r.encoding = "UTF8"
    with open('4relay.txt', 'w') as output_file:
     output_file.write(r.text)
    f = open('4relay.txt')
    str_4relay = f.read()
    f.close()
    print('parsing_GPIO_4relay = Ok')
    str_4relay2 = str_4relay[str_4relay.find(":") + 1:]
    r1 = str_4relay2[: str_4relay2.find(";")]
    r2 = str_4relay[10:11]
    r3 = str_4relay[18:19]
    r4 = str_4relay[23:24]
    relay_list = [r1, r2, r3, r4]
    Variables.parsing_GPIO_4relay = relay_list
    Variables.parsing_GPIO_4relay1 = relay_list
    print('Variables.parsing_GPIO_4relay =' + str(Variables.parsing_GPIO_4relay))
  except:
      r1 = '0'
      r2 = '0'
      r3 = '0'
      r4 = '0'
      relay_list = [r1, r2, r3, r4]
      Variables.parsing_GPIO_4relay = relay_list
      print('Variables.parsing_GPIO_4relay =' + str(Variables.parsing_GPIO_4relay))
      pass
  finally:
      lock.release()
  sleep(30.0)
  parsing_GPIO_4relay11()
  return relay_list
Другой файл с другими функциями в потоках, которые обращаются к тем же глобальным переменным:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 import threading
from threading import Thread
from time import sleep
import requests
from package1_copy import Variables
lock = threading.RLock()
def logicks_Sadok_Light():
       lock.acquire()
       try:
           if int(Variables.parsing_ESP) <=100:
              url= Variables.GPIO_sad_on
              requests.get(url)
              print('Night street')
           else:
               url = Variables.GPIO_sad_off
               requests.get(url)
               print('Day street!')
       except:
           pass
       finally:
           lock.release()
def logicks_4relay_Light():
    lock.acquire()
    try:
        if int(Variables.parsing_ESP) <= 100:
            url = Variables.GPIO_4relay1_on
            requests.get(url)
            url = Variables.GPIO_4relay2_on
            requests.get(url)
            url = Variables.GPIO_4relay3_on
            requests.get(url)
            url = Variables.GPIO_4relay4_on
            requests.get(url)
            print('4Relay Night')
        else:
            url = Variables.GPIO_4relay1_off
            requests.get(url)
            url = Variables.GPIO_4relay2_off
            requests.get(url)
            url = Variables.GPIO_4relay3_off
            requests.get(url)
            url = Variables.GPIO_4relay4_off
            requests.get(url)
            print('4 Relay Day!')
    except:
        print('Except!')
        pass
    finally:
        lock.release()
def remote_control_install():
    lock.acquire()
    try:
        logicks_Sadok_Light()
        logicks_4relay_Light()
    finally:
        lock.release()
        pass
    sleep(10.0)
    remote_control_install()
Файл с переменными:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 send_to_server = ''
receive_from_server = []
receive_from_server1 = 0
receive_from_server2 = 0
receive_from_server3 = 0
receive_from_server4 = 0
receive_from_server5 = 0
receive_from_server6 = 0
receive_from_server7 = 'home'
Sadok_Light = 1
parsing_ESP = 110
r1 = '0'
r2 = '0'
r3 = '0'
r4 = '0'
parsing_GPIO_4relay = [r1, r2, r3, r4]
GPIO_sad_on = 'http://192.168.0.100/gpio?st=0&pin=0'
GPIO_sad_off = 'http://192.168.0.100/gpio?st=1&pin=0'
GPIO_4relay1_on = 'http://192.168.0.120/gpio?st=1&pin=0'
GPIO_4relay1_off = 'http://192.168.0.120/gpio?st=0&pin=0'
GPIO_4relay2_on = 'http://192.168.0.120/gpio?st=1&pin=2'
GPIO_4relay2_off = 'http://192.168.0.120/gpio?st=0&pin=2'
GPIO_4relay3_on = 'http://192.168.0.120/gpio?st=1&pin=5'
GPIO_4relay3_off = 'http://192.168.0.120/gpio?st=0&pin=5'
GPIO_4relay4_on = 'http://192.168.0.120/gpio?st=1&pin=14'
GPIO_4relay4_off = 'http://192.168.0.120/gpio?st=0&pin=14'
response_flag = ['0', '0', '0', '0', '0', '0', 'sleep']
response_flag_1 = ''
response_flag_2 = ''
response_flag_3 = ''
response_flag_4 = ''
response_flag_5 = ''
response_flag_6 = ''
response_flag_7 = ''
parsing_ESP1 = 110
parsing_GPIO_4relay1 = [r1, r2, r3, r4]
Sadok_Light1 = 1
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2021, 14:28
Ответы с готовыми решениями:

Ошибка при передаче данных из access в word через закладки
Приветствую всех. При переносе данных из полей формы access в закладки word в цикле происходит сбой и часть закладок не заполняется,...

Ошибка при передаче данных
Я на форме нашёл способ передачи значений переменных с одной страницы на другую при помощи Json(язык JavaScript), там передача происходила...

Ошибка при передаче данных
Есть две формы 1 и 2. В первой формы при нажатии кнопки должны меняться названия лейбелов во 2 форме вот код для использования данных в...

4
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
24.06.2021, 14:59
Цитата Сообщение от Stepa075 Посмотреть сообщение
'control': 'home'
этот параметр так же теряется?
если да, то два варианта:
1: формировать запрос форматированием типа f'http....param={value}'
2: чекать переменную и при её отсутствии делать рестарт всей программы
1
0 / 0 / 0
Регистрация: 14.02.2021
Сообщений: 11
24.06.2021, 15:16  [ТС]
Да, этот параметр также теряется. Если можно более развернуто по первому пункту (само форматирование в моем случае) мне же нужно передавать название параметра и его значение. Как это оформить? И главный вопрос - почему так происходит?
0
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
24.06.2021, 15:30
Stepa075, как-то так
Python
1
    r = requests.get(f'http://some_site/index.php?params={Variables.parsing_ESP1}&params1={Variables.Sadok_Light1}&params2_1={r4_1}&params2_2={r4_2}&params2_3={r4_3}&params2_4={r4_4}&control=home')
суть в том чтобы отказаться от некторых функций в угоду ядру, и сформировать гетзапрос вручную
если и это не сработает, можно попробывать заменить requests.get на простой запрос из urllib

но скорее всего тебе нужно попытаться поработать со сборщиком мусора модуль gc - запустить и переодически чистить

Добавлено через 1 минуту
само форматирование:
Python
1
2
3
4
variable=9999999
print(f' f перд кавычками форматирует {variable}') 
выведет
f перд кавычками форматирует 9999999
1
0 / 0 / 0
Регистрация: 14.02.2021
Сообщений: 11
24.06.2021, 15:52  [ТС]
Большое спасибо за развернутый ответ! Буду пробовать и так и эдак. Интересно найти действенное решение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.06.2021, 15:52
Помогаю со студенческими работами здесь

Ошибка в кодировке при передаче через URL
var sql=&quot;SELECT `name`, `number` FROM `test1` WHERE `name` like 'абвгдabcd123'&quot;; xmlhttp.open(&quot;GET&quot;,&quot;searchIt.php?sql=&quot;+sql,true); ...

Ошибка при передаче данных UDPClient
Здравствуйте. Делаю лабу по сетевому взаимодействию. Есть два приложения А и Б, используя UDPClient приложение А должно отправлять данные...

Ошибка при передаче данных по USART
Здравствуйте, отправляю по USART 16-байтный буфер из данных с 12-битного АЦП (8 каналов, по 2 байта на канал). Для приема использую...

Ошибка при передаче данных в GridView
Среда: WPF Ошибка: Произошла ошибка базового поставщика в Open. Код: private void Window_Loaded(object sender,...

Ошибка при передаче данных в TextBox
В классе есть метод, выполняющий запрос в БД. Я хочу полученные данные передать в форму и при загрузке формы, данные вставляются в TextBox....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru