1. 程式人生 > >多程序開發如何共享資料:以python為例

多程序開發如何共享資料:以python為例

最近使用gunicorn部署了一個專案,在啟動的時候,加上了worker 3的引數。也就是說,同時有3個程序存在。
這就引出了程序間通訊的問題。因為有一個功能只用單執行緒去執行就行了,也就是說,即使啟動100個程序,
這部分功能只有一個執行的例項才可以。否則系統就紊亂了。

如何在多程序之間共享資料呢?
根據我搜索到的資料,有以下幾種方案:

使用 multiprocessing.managers

外部資源共享物件,例如資料庫,檔案等

這個很好理解,即使程序再多,連線的都是同一個資料的同一張表,更新的都是一個變數的值。
不管任何程序更新了值,後面再執行的程序取到的值肯定就是最新的 了。

使用 thread worker 來跑

其他控制方法

程序間通訊的可能性不大了,因為是 gunicorn 控制的。的確是這樣,原來的程式碼也沒有考慮到多程序處理。
況且據說python的多程序是假的。。。。所以說,需要找到一個讓程式碼只執行一次的控制條件。
比如當前程式碼的副作用就是生成了一個檔案。我就在每次執行之前判斷當前是否存在產生時間為這個時間點的檔案存在,
如果存在,直接跳過本次迴圈就好了。

心得

在一開始的設計中就要考慮好是用多執行緒,多程序,還是單執行緒,單程序。