Мне очень жаль, я не смог упростить пример (возможно, благодаря вашим подсказкам, я его уменьшу).
Это мой код.
Базовое представление таково: в реальном примере у меня около 100 IP-адресов и 10 токенов (но в примере я намеренно добавил 28 токенов). Каждый токен можно использовать 4 раза в минуту (фактически он должен использоваться каждые 25 секунд).
Каждый IP-адрес должен использовать только один токен и отправлять запрос GET на URL-адрес
code> и завершает его. Если IP 1.1.1. использовал токен a, то он больше не должен использовать токен b, и следующая итерация должна перейти к IP 2.2.2.2.
У меня проблема: на самом деле у меня есть 10 токенов, и я добавляю Sleep(5), чтобы между первым и пятым был промежуток не менее 25 секунд, но проблема с мой текущий код:
он использует первый токен, второй, третий, четвертый и пятый. Затем, поскольку последнее использование токена a было 25 секунд назад, он снова использует токен a. Хотя я исключаю, что следует использовать все токены.
В моем текущем коде проблема в том, что если у меня более 5 токенов, у меня возникнет эта проблема.
Я знаю, что один из способов — уменьшить значение сна, но если я увеличу количество токенов в будущем, мне также следует изменить значение сна.
Не могли бы вы мне помочь?
tokens = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
dbs = [{'token': x, 'time': None} for x in tokens]
client_ips = [{'ip': x['ip'], 'desc': x['desc']} for x in clients]
thirty_days_ago = (datetime.datetime.now() - datetime.timedelta(days=days)).strftime('%Y-%m-%d')
requests_response_list = []
checked_ips = set()
for ip in client_ips:
for db in dbs:
now = datetime.datetime.now()
if ip['ip'] in checked_ips:
continue
if db['time']:
elapsed_time = (now - db['time']).total_seconds()
if elapsed_time < 25:
continue
print(f"IP is {ip['ip']}, Token: {db['token']}.")
response = requests.get(
url=f"http://my.url.com/ip_addresses/{ip['ip']}",
headers={
'accept': 'application/json',
'x-apikey': db['token'],
}
).json()['data']['attributes']
for report in response:
# report['date'] is a timestamp value, so I convert it to a date Y-m-d.
date = datetime.datetime.fromtimestamp(report['date']).strftime('%Y-%m-%d')
if thirty_days_ago
Подробнее здесь: https://stackoverflow.com/questions/791 ... re-not-use
При переборе двух списков используются только первые пять членов, а остальные не используются. ⇐ Python
Программы на Python
1731395751
Anonymous
Мне очень жаль, я не смог упростить пример (возможно, благодаря вашим подсказкам, я его уменьшу).
Это мой код.
Базовое представление таково: в реальном примере у меня около 100 IP-адресов и 10 токенов (но в примере я намеренно добавил 28 токенов). Каждый токен можно использовать 4 раза в минуту (фактически он должен использоваться каждые 25 секунд).
Каждый IP-адрес должен использовать только один токен и отправлять запрос GET на URL-адрес
code> и завершает его. Если IP 1.1.1. использовал токен a, то он больше не должен использовать токен b, и следующая итерация должна перейти к IP 2.2.2.2.
У меня проблема: на самом деле у меня есть 10 токенов, и я добавляю Sleep(5), чтобы между первым и пятым был промежуток не менее 25 секунд, но проблема с мой текущий код:
он использует первый токен, второй, третий, четвертый и пятый. Затем, поскольку последнее использование токена a было 25 секунд назад, он снова использует токен a. Хотя я исключаю, что следует использовать все токены.
В моем текущем коде проблема в том, что если у меня более 5 токенов, у меня возникнет эта проблема.
Я знаю, что один из способов — уменьшить значение сна, но если я увеличу количество токенов в будущем, мне также следует изменить значение сна.
Не могли бы вы мне помочь?
tokens = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
dbs = [{'token': x, 'time': None} for x in tokens]
client_ips = [{'ip': x['ip'], 'desc': x['desc']} for x in clients]
thirty_days_ago = (datetime.datetime.now() - datetime.timedelta(days=days)).strftime('%Y-%m-%d')
requests_response_list = []
checked_ips = set()
for ip in client_ips:
for db in dbs:
now = datetime.datetime.now()
if ip['ip'] in checked_ips:
continue
if db['time']:
elapsed_time = (now - db['time']).total_seconds()
if elapsed_time < 25:
continue
print(f"IP is {ip['ip']}, Token: {db['token']}.")
response = requests.get(
url=f"http://my.url.com/ip_addresses/{ip['ip']}",
headers={
'accept': 'application/json',
'x-apikey': db['token'],
}
).json()['data']['attributes']
for report in response:
# report['date'] is a timestamp value, so I convert it to a date Y-m-d.
date = datetime.datetime.fromtimestamp(report['date']).strftime('%Y-%m-%d')
if thirty_days_ago
Подробнее здесь: [url]https://stackoverflow.com/questions/79179957/iterating-over-two-lists-just-uses-the-first-five-members-and-others-are-not-use[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия