簡體   English   中英

超性能比較

[英]Super-performatic comparison

我有一個python代碼,可以使用requests模塊從HTTP API恢復信息。 每次調用之間以幾毫秒的間隔一次又一次地運行此代碼。

我正在調用的HTTP API可以向我發送3種不同的響應,可以是:

  • HTTP狀態為200文本'EMPTYFRAME'
  • HTTP狀態為200文本'CAMERAUNAVAILABLE'
  • JPEG圖像,HTTP狀態為200

這是處理這種情況的代碼的一部分:

   try:
        r = requests.get(url,
            auth=(username, pwd),
            params={
                  'camera': camera_id,
                  'ds': int((datetime.now() - datetime.utcfromtimestamp(0)).total_seconds())
            }
        )

        if r.text == 'CAMERAUNAVAILABLE':
            raise CameraManager.CameraUnavailableException()
        elif r.text == 'EMPTYFRAME':
            raise CameraManager.EmptyFrameException()
        else:
            return r.content
    except ConnectionError:
        # handles the error - not important here

關鍵部分是if / elif / else部分,此比較花費的時間太長,無法完成,如果我將其完全刪除並簡單地將其替換為return r.content ,則我具有想要的性能,但是請檢查其他兩個圖像以外的響應對於應用程序流程很重要。

我也嘗試過:

        if len(r.text) == len('CAMERAUNAVAILABLE'):
            raise CameraManager.CameraUnavailableException()
        elif len(r.text) == len('EMPTYFRAME'):
            raise CameraManager.EmptyFrameException()
        else:
            return r.content

和:

        if r.text[:17] == 'CAMERAUNAVAILABLE':
            raise CameraManager.CameraUnavailableException()
        elif r.text[:10] == 'EMPTYFRAME':
            raise CameraManager.EmptyFrameException()
        else:
            return r.content

這使其速度更快,但仍不如我認為的快。

有沒有辦法優化這種比較?

編輯

有了可接受的答案,最終代碼如下:

        if r.headers['content-type'] == 'image/jpeg':
            return r.content
        elif len(r.text) == len('CAMERAUNAVAILABLE'):
            raise CameraManager.CameraUnavailableException()
        elif len(r.text) == len('EMPTYFRAME'):
            raise CameraManager.EmptyFrameException()

檢查響應的Content-Type提供了一種確保收到圖像的更快方法。

比較整個r.text (可能包含JPEG字節)可能很慢。

您可以比較服務器應設置的Content-Type標頭:

ct = r.headers['content-type']
if ct == "text/plain":
    # check for CAMERAUNAVAILABLE or EMPTYFRAME
else:
    # this is a JPEG

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM