我有這個配置在module.yaml在GAE中,Python請求是否真的並行處理?
runtime: python27
api_version: 1
instance_class: F2
threadsafe: true
automatic_scaling:
min_idle_instances: automatic
max_idle_instances: 8
min_pending_latency: 0.25s
max_pending_latency: automatic
max_concurrent_requests: 80
並在控制檯中我看到這些數字也:
QPS* Latency* Requests Errors Age Memory App Engine Rel. Availability
8.730 113.5 ms 12621 0 1:48:25 67.9 MBytes 1.9.27 Resident
14.142 76.7 ms 12543 0 1:48:26 79.8 MBytes 1.9.27 Resident
13.411 74.3 ms 12753 0 1:48:26 96.4 MBytes 1.9.27 Resident
如果乘以QPS通過延遲(每秒查詢)(換算成秒):
- 8.730查詢/第二X0.1135秒= 0.990855查詢
- 14.142查詢/秒OND X0.0767秒= 1.0846914查詢
- 13.411查詢/秒X0.0743秒= 0.9964673查詢
我重複相同的鍛鍊,每天多次,並在所有的情況下,在右邊的最終數目是非常非常接近TO 1查詢。
所以我懷疑如果同一個實例能夠並行處理查詢。我可以在平均延遲中看到的流程非常快,當我需要長時間工作時,流程使用任務隊列。我不使用此模塊內的異步進程。我讀到,當你有一個空閒的進程等待urlfetch響應,這將是另一個python線程/請求並行執行的機會,但不是我的情況。
的官方文檔中沒有這方面的詳細說明,只是指出這一點:
使用的併發請求
默認情況下,App Engine的連續發送請求到指定的Web服務器。您可以將App Engine配置爲通過將線程安全元素添加到app.yaml來發送多個並行請求。
線程:真
我是否需要設置其他參數或使用特殊的圖書館,讓許多要求進行並聯在同一個實例執行?對於上面顯示的QPS編號,平均CPU利用率在15%到25%之間,因此有空間至少並行運行3個請求(個人估計沒有足夠的分析)
謝謝!
據我所知,'threadsafe:true'足以告訴GAE實例可以並行處理多個請求。請注意,使用CPython,在大多數情況下(由於Global Interpreter Lock的限制 - GIL),一次只能運行一個線程。因此,在python中,除非程序沒有忙於等待,否則通常不會通過線程獲得太多收益。如果您產生了對數據存儲或使用urlfetch的異步請求。 – mgilson
謝謝,我也讀了關於這個情況,因此我說我的代碼在這個模塊中不使用異步函數。如果我將運行時更改爲PHP或JAVA,我是否會有相同的限制?如果PHP運行時可以真正並行處理請求,這對我來說可能是一個解決方案,我可以將一些模塊遷移到PHP。 –
這樣做的必然結果是,有更多的實例F1比同等數量的更高實例F2或F4更好,因爲更多的請求可以並行處理並擁有更多的實例......您怎麼看?擁有數千QPS時,在預算優化方面有所考慮。 –