# -*- coding: utf-8 -*- import time import socket UDP_IP = "127.0.0.1" UDP_PORT = 8989 PACKET_SIZE = 1024 # bytes BITRATE = 8192.0 # kilobits per second DELAY = (PACKET_SIZE * 8.0) / (BITRATE * 1000) def load_generator(): print 1 / DELAY, "packets per second" sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # В этой переменной храним идеальное время для следующей итерации; # для первой итерации это просто текущее время next_time = time.time() while True: # Работаем packet = bytearray(PACKET_SIZE) sock.sendto(packet, (UDP_IP, UDP_PORT)) # Планируем идеальное время для следующей итерации next_time += DELAY # Считаем задержку, которую нужно поспать до следующей итерации real_delay = next_time - time.time() # Если задержка меньше нуля, то мы опоздали # Если задержка больше нуля, то мы проснёмся аккурат в next_time # (или немного позже, если компьютер тормозит, но это будет скомпенсировано) if real_delay > 0: time.sleep(real_delay) else: # Отладочный вывод print "%.05f seconds late!" % -real_delay if __name__ == "__main__": try: load_generator() except KeyboardInterrupt: print "Stopped by Key"