簡體   English   中英

長時間運行的HTTP服務器連接(Python)

[英]Long-running connection HTTP server (Python)

我正在嘗試設計一個Web應用程序,該應用程序處理來自異步進程的大量大型混合媒體文件。 每個過程可能需要幾分鍾。

這些文件可以作為POST正文上載,也可以由Web服務器根據提供的源URL提取。 可以通過各種外部工具以同步或異步方式處理文件。

我需要能夠平衡此應用程序的負載,以便我可以同時處理多個大文件,並且可以承受擴展的費用。

我認為Python是此項目的最佳選擇,但除此之外,我也歡迎任何解決方案。 該應用程序可以將文件傳遞回去,也可以依靠消息傳遞通道來通知客戶端有關過程完成的信息。

我認為我可能會使用的一些方法:

1)使用非阻塞式Web服務器,例如Tornado,它可以保持連接打開,直到完成文件處理為止。 啟動外部處理命令,Web服務器等待直到文件准備就緒,並將生成的IO流直接通過管道傳遞回返回它的Web應用程序。 由於發送請求的進程是異步的,因此它們可能需要等待(除非出現內存或其他一些問題)。

2)使用常規的Web服務器,例如Cherrypy(我對此很有信心),並讓Webapp使用消息傳遞通道報告處理進度。 Web服務器在接收到文件,對其進行驗證並將其發送到后台進程后立即返回HTTP響應。 同時,它發送一條消息,通知進程開始。 然后,后台進程負責將文件傳遞到可用位置,並向通道發送另一條消息,通知新文件的位置。 該解決方案看起來比1)更加靈活,但是需要編寫一個單獨的腳本來處理Web應用程序外部的消息,並為必須在特定點清理的臨時文件提供一個單獨的存儲空間。

3)使用我不熟悉的上述任何Webserve的某些內部消息傳遞功能...

編輯:類似CherryPy的pub-sub引擎( http://cherrypy.readthedocs.org/en/latest/extend.html?highlight=messaging#publish-subscribe-pattern )可能是一個很好的解決方案。

有什么建議么?

謝謝,

我遇到了類似的情況,並提出了由團隊實施的真正大規模數據處理引擎。 我們想在Flask中構建我們的api調用,其中一些調用可能需要花費數小時才能完成,但是可以實時通知用戶發生了什么。

基本上,我想到的是您所說的選項2。在我通過apache為flask應用程序提供服務的同一台計算機上,我創建了一個toronado應用程序,該應用程序提供了一個向最終用戶報告進度的websocket。 服務完我的主頁后,它將建立與龍卷風服務器的websocket連接,並且flask應用程序會定期將更新發送到龍卷風應用程序,再發送給最終用戶。 即使在長時間運行的應用程序中關閉了瀏覽器,apache仍可以保留請求並進行處理,並且重新登錄后,我仍然可以看到當前的進度。

我在這里詳細介紹了該解決方案:

http://jonfeatherstone.com/2013/08/01/mongo-and-websockets-for-application-logging/

祝好運!

暫無
暫無

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

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