業務場景描述:在常規的開發中,我們開發接口服務,一般會將數據放在數據庫、文件等第三方文件,啟動服務后,服務到后臺數據庫中加載數據,這樣做的好處當然是開發會更加便利以及數據的可復用性較高,即不同的場景任務可以使用同一份數據。缺點則是涉及數據加載,會使效率變的低下。因為數據還會涉及從數據庫到服務器,這個過程并非數據直接轉發。在一些場景固定的情況下,我們可以直接將數據放到內存中,這樣算法計算完的數據,可以就在內存中保存,然后直接開發接口,由外部應用調用。
問題描述:使用第三方插件,如uwsgi,gunicorn插件將服務發布到生產后。常規寫法無法保證任務同時進行且互不影響。如果使用開發服務wsgi直接啟動,可以使用多線程方式實現,但服務并不穩定,官方也不推薦這樣使用。
解決方案:方案同樣是使用多線程,只不過需要使用后臺運行的方式,讓算法在后臺運行,這樣算法在運行時,不會阻塞web服務的主進程。即可保證同時運行
技術路線:算法、flask、gunicorn
具體代碼:見下圖
重點說明:在這里邊其實只有一個之間沒有怎么接觸過的點就是后臺運行。daemon模式,這個模式的運行,不會阻塞主線程。