В Linux, здесь рефакторинг кода mizipzor, который делает это немного проще, если вы должны использовать этот код в нескольких местах.
import sys
import select
import tty
import termios
class NonBlockingConsole(object):
def __enter__(self):
self.old_settings = termios.tcgetattr(sys.stdin)
tty.setcbreak(sys.stdin.fileno())
return self
def __exit__(self, type, value, traceback):
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, self.old_settings)
def get_data(self):
if select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []):
return sys.stdin.read(1)
return False
Вот как это использовать: Этот код будет напечатайте счетчик, который продолжает расти, пока вы не нажмете ESC.
with NonBlockingConsole() as nbc:
i = 0
while 1:
print i
i += 1
if nbc.get_data() == '\x1b': # x1b is ESC
break
Можете ли вы конкретно указать «иногда», как часто вы пытаетесь вызывать URL-адреса? Удалось ли вам иногда получать результаты?
Я предполагаю, что серверы работают. Всякий раз, когда вы делаете request.get, создается tcp-соединение, а когда вы неоднократно вызываете request.get, оно создает несколько tcp-соединений, что снижает производительность и может привести к ошибкам HTTPSConnectionPool. Вы можете попробовать сеанс Python-запроса , он сохранит соединение TCP, созданное для повторного использования.