2014-02-26 4 views
0

suds를 사용하여 실시간으로 서버에서 데이터를 가져 오는 python 프로그램이 있습니다. 문제는 데이터 포인트가 1 초마다 업데이트되고 프로그램의 런타임 지연과 클라이언트와 서버 사이의 지연으로 인해 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 문이 코드를 실행하기 전에 true인지 확인하므로 문 안의 코드가 정확하지 않을 수도있다. – user2769651

답변

2

RQ 같은 빠른 쓰기와 큐에 데이터를 직접 밀어 또는 직접 레디 스에서 고려한다. 그렇다면 시간별 집계 및 원하는 다른 계산은 대역 외이며 실행 시간에는 영향을 미치지 않습니다.