2014-02-26 132 views
0

的运行时我有一个使用肥皂水从实时服务器获取数据Python程序。问题是数据点在每秒左右更新一次,并且由于程序的运行时延迟以及客户端和服务器之间的延迟,我每1或2秒就会得到一个新值,所以我错过了。无论如何,我可以减少这种延迟,并尽可能使它“实时”,或者这是不可能的?换句话说,我可以减少服务器和客户端程序之间的延迟,这样我就不会错过服务器正在发布的值,也许可以通过某种方式减少我的循环运行时间?在我的代码中有if部分之前,我的代码非常快,每次服务器更新相应的数据点时我都能够获取值,但现在if部分代码有时会错过新的数据点。减少while循环

pollTime = time.time() + 3600 #Creates a polltime, to poll the server for hourly updated values 

while True: 
    #polls the server 
    mPowerValue = client.service.Read(mPowerSum).Item[0].UCPTvalue[0].value 
    hPowerValue = client.service.Read(hPowerSum).Item[0].UCPTvalue[0].value 
    print "mPowerSum " + mPowerValue, "hPowerSum " + hPowerValue 

    if time.time() > pollTime: 

     pollTime = time.time() + 3600 
     mEnergyValue = client.service.Read(mEnergySum).Item[0].UCPTvalue[0].value 
     hEnergyValue = client.service.Read(hEnergySum).Item[0].UCPTvalue[0].value 
     cycleValue = client.service.Read(cycleTime).Item[0].UCPTvalue[0].value 
     upValue  = client.service.Read(upTime).Item[0].UCPTvalue[0].value 
     downValue = client.service.Read(downTime).Item[0].UCPTvalue[0].value 
     pieceValue = client.service.Read(pieces).Item[0].UCPTvalue[0].value 
     print "mEnergySum", mEnergyValue, "hEnergySum", hEnergyValue, "cycleTime", cycleValue, "upTime", upValue, "downTime", downValue, "pieces", pieceValue 
+1

记住你有两种不同类型的延迟这里需要不同的解决方案。在代码循环中进行任何优化都不会改善网络延迟。 – BlackVegetable

+0

另外,你是指'if'语句中的条件语句,还是你指的是当你说它用来快速运行时所遵循的所有表达式? – BlackVegetable

+0

我只是指if语句。我知道编译器在运行代码之前检查if语句是否为真,因此语句中的代码无关紧要? – user2769651

回答

2

考虑直接顺手把数据与快速写入队列像RQ,或直接在Redis的。然后,您希望做的每小时聚合和任何其他计算都是带外的,并且不会影响运行时间。