У меня есть эта программа, которая отправляет запрос GET с использованием библиотеки запросов и затем отправляет запрос POST на другой сервер.Несколько случайных запросов POST в Python
import requests
# inside the loop :
headers = {'charset':'utf-8','Content-Type':'application/json'}
url = "http://someurl/_get_v2.php"
data = jenal
try :
resp = requests.post(url,json=data,headers=headers, timeout=(connect_timeout,read_timeout))
print "Post request sent"
# If a connection error occurs, start from the beginning of the loop
except requests.exceptions.ConnectionError as e:
continue
# If a read_timeout error occurs, start from the beginning of the loop
except requests.exceptions.ReadTimeout as e:
continue
time.sleep(10)
Это часть POST от основного контура. Я использовал try и за исключением случаев, когда программа задерживается, я не хочу, чтобы она останавливалась на любую ошибку, но обновляется и продолжается с самого начала цикла и так далее навсегда. Логично, что программа должна быть прекрасной, но при внезапном множестве задержек программа одновременно отправляет несколько запросов POST.
Например: журнал должен быть таким: 10 отправлено. 20 отправлено. 30 отправлено. 45 отправлено (задержка 5 секунд). 55 послало
но что это происходит: 10 послало 20 послало 30 послала задержки ..
45 послало 45 послали 45 посланных (несколько копий данных посылаются в то же самое время, которое развращает мою базу данных) 55 отправлено
Как я могу предотвратить дополнительные копии?
Это первая часть программы. В случае, если есть что-нибудь в почтовом части, эта часть повторяется, и я могу видеть на печать каждый раз:
connect_timeout = 3.05
read_timeout = 2
while True:
loop_time_start = time.time()
# GET
url_source = 'http://something/api_json.asp?cmd=list_metering&auth=YWRtaW46YWRtaW4='
try:
url = requests.get(url_source)
print "GET request sent"
except requests.exceptions.ConnectionError as e: continue
Что делать, если вы добавить 'boolean' к нему и при проводке, установите его в' 'true' .. проводки = true' и когда вы поймаете ошибку или закончите POSTing, установите ее на «False» .. 'posting = False'. Итак, вы можете сказать: 'if not posting:'. – Dobz
@ RussellHickey Я помещаю его в запрос POST сэр ?! –
выставить его за пределами 'try:', 'if not posting: try: posting = True'. Затем после вашего 'print' и внутри' except 'помещается' posting = False' ... С другой стороны, это может быть продолжение, это не дает времени ждать следующего. – Dobz