問題
很多情況下我們想讓task共享變量,該怎麼做?
celery的併發原理
celery的併發任務池,有eventlet, gevent, prefork, thread類型
eventlet/gevent協程: 只有一個進程一個線程, 全局變量在task之間共享
prefork屬於multiprocessing: multiprocessing全局變量也是共享的
thread多線程: 全局變量共享
驗證方法
用ab命令模擬大量併發,很容易測試出來
ab -n 1000 -c 100 -p ./post.txt -T application/json http://xxxx:5000/xxx
結論
-
celery如果訪問數據庫, gpu等資源, 不用擔心多次加載
-
注意: 如果在task中初始化全局變量, 初始化較慢, 同時又收到大量task請求,可能會導致初始化多次
佛說大乘無量壽莊嚴清淨平等覺經pdf
淨土大經科注2014-doc
此生必看的科學實驗-水知道答案
印光大師十念法(胡小林主講第1集)