每秒Python事件

时间:2017-01-13 20:39:03

标签: python scheduling

我正在尝试编写一个脚本来向远程syslog服务器发送信息。我想节制到每秒x个事件数。使用以下代码,我已经能够获得大约每秒10k的速度,但在某些测试中,这可能有点慢。当我试图加快速度时,它似乎无法赶上。我觉得它与我想做的大量电话有关,但是我在这个过程中没有使用ram,只有30%的单核。

#!/usr/bin/python
import argparse, socket, sched, time

### constants ###
SYSLOG_PORT = 514
MESSAGE = "Hello World!"

### Setup Scheduler ###
scheduler = sched.scheduler(time.time, time.sleep)

def newTimedCall(callsPerSecond, callback, *args, **kw):
    period = 1.0 / callsPerSecond
    def reload():
        callback(*args, **kw)
        scheduler.enter(period, 0, reload, ())
    scheduler.enter(period, 0, reload, ())

### argument reading ###
parser = argparse.ArgumentParser()
parser.add_argument('-t', '--target', help='Target IP', required='True')
parser.add_argument('-e', '--eps', help='Events Per Second', required='True')
args = parser.parse_args()
eps = float(args.eps)
targetIp = args.target

### setup socket
socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

def sendMessage():
    socket.sendto(MESSAGE, (targetIp, SYSLOG_PORT))


newTimedCall(eps, sendMessage)
scheduler.run()

所以我的问题归结为,我可以做些什么来实现更高的费率?我似乎是从错误的角度来攻击这个问题。做一个简单的while循环我可以发送60-70k eps。在一个线程/核心上。

0 个答案:

没有答案