Advertisement
andreymal

rate test

Sep 3rd, 2019
404
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.67 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. import time
  4. import socket
  5.  
  6.  
  7. UDP_IP = "127.0.0.1"
  8. UDP_PORT = 8989
  9.  
  10. PACKET_SIZE = 1024  # bytes
  11. BITRATE = 8192.0  # kilobits per second
  12.  
  13. DELAY = (PACKET_SIZE * 8.0) / (BITRATE * 1000)
  14.  
  15.  
  16. def load_generator():
  17.     print 1 / DELAY, "packets per second"
  18.  
  19.     sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  20.  
  21.     # В этой переменной храним идеальное время для следующей итерации;
  22.     # для первой итерации это просто текущее время
  23.     next_time = time.time()
  24.  
  25.     while True:
  26.         # Работаем
  27.         packet = bytearray(PACKET_SIZE)
  28.         sock.sendto(packet, (UDP_IP, UDP_PORT))
  29.  
  30.         # Планируем идеальное время для следующей итерации
  31.         next_time += DELAY
  32.  
  33.         # Считаем задержку, которую нужно поспать до следующей итерации
  34.         real_delay = next_time - time.time()
  35.  
  36.         # Если задержка меньше нуля, то мы опоздали
  37.         # Если задержка больше нуля, то мы проснёмся аккурат в next_time
  38.         # (или немного позже, если компьютер тормозит, но это будет скомпенсировано)
  39.         if real_delay > 0:
  40.             time.sleep(real_delay)
  41.         else:
  42.             # Отладочный вывод
  43.             print "%.05f seconds late!" % -real_delay
  44.  
  45.  
  46. if __name__ == "__main__":
  47.     try:
  48.         load_generator()
  49.     except KeyboardInterrupt:
  50.         print "Stopped by Key"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement