Вариант 1. Чтобы измерить время отклика с помощью curl, используйте следующую команду:
curl -o /dev/null -s -w 'Total: %{time_total}\n' https://www.google.com
Выход для образца:
Вариант 2. Чтобы получить более подробную информацию, используйте следующую команду:
curl -o /dev/null -s -w 'Connect: %{time_connect}\nStart Transfer: %{time_starttransfer}\nTotal: %{time_total}\n' https://www.google.com
Выход образца:
Этого будет достаточно:
start = t[1]
sig = s[1]==0 # init signal
n = [] # non zero
z = [] # zero
for i,(x,y) in enumerate(zip(t[1:],s[1:])):
cur = y==0 # current signal
# signal changes or meets the last frame
if sig != cur or i == len(t[1:])-1:
off = x - start
z.append(off) if sig else n.append(off)
start = x
sig = cur
Обратите внимание: первый кадр отбрасывается.
Обновление: Еще одним решением является подсчет сигналов.
def fn(n):
n[-1] += 1
n = [0] # non-zero
[fn(n) if x != 0 else n.append(0) for x in s[1:]] # discard the first frame
n = [x * 10 for x in n if x > 0]
z = [0] # zeros list
[fn(z) if x == 0 else z.append(0) for x in s[1:]]
z = [x * 10 for x in z if x > 0]
Конечно, я надеюсь, что это поможет.
Это функция, которую вы можете использовать для подключения двух списков
def btwn(t,s):
t_zero = []
t_non_zero = []
running = 0
if s[0]==0: #Assign the starting value
prev_zero = True
else:
prev_zero = False
for score in range(len(s)): #run the length of the lists, using the position
#compare current score to previous score
#if the previous and current are same, keep a running
#total of the difference, if they change, dump that
#running total into the appropriate list
if score != 0: #unless it's the first element, add to running
running += t[score] - t[score - 1]
if (s[score] == 0 and prev_zero) or (s[score] != 0 and not prev_zero):
#unchanged, add to running
continue
elif s[score] == 0: #changed to zero from non-zero
prev_zero = True
t_non_zero.append(running)
running = 0
else: #changed to non-zero from zero
prev_zero = False
t_zero.append(running)
running = 0
if prev_zero: #add the final value to one of the two lists
t_zero.append(running)
else:
t_non_zero.append(running)
return t_zero, t_non_zero #return the lists
Эта функция принимает 2 списка и возвращает 2 списка.
Функция начинается с текущего вычисленного числа в нуле, считывает первое значение списка из s, чтобы решить, начинаем ли мы с нуля, или нет, а затем последовательно просматривает каждое значение в списке. Он добавляет промежуточный итог на каждой итерации в зависимости от времени t между этим элементом и предыдущим. Если значение переключается с нуля на ненулевое значение или наоборот, оно сбрасывает промежуточную сумму в соответствующий список и сбрасывает промежуточную сумму.
Я протестировал его, и эта функция вернула нужные вам списки, хотя первый ненулевой элемент на самом деле равен 50, а не 40. Значение s равно non_zero для первых 5 последовательных периодов по 10 секунд, и это не до шестого элемента, который меняется на ноль. Несмотря на то, что первый элемент имеет время = 0, он по-прежнему не равен нулю для каждого пробела между элементами, пока вы не соберете следующее изменение оценки в элементе 6.
Вы можете вызвать функцию и затем назначить ее нужным спискам вывода, если хотите
#example
t_zero, t_non_zero = btwn(t,s)