worker进程和task进程区别_celery 每个 worker 在执行任务时,如何配置一定数量的 task?...
19
2017-08-03 00:36:30 +08:00 ? 2
http://docs.celeryproject.org/en/latest/userguide/configuration.html
參數配置都在這里,新舊配置的 key 對照表也有。
CELERYD_PREFETCH_MULTIPLIER = n
worker_prefetch_multiplier = n
這個是任務預取功能,就是每個工作的進程/線程/綠程在獲取任務的時候,會盡量多拿 n 個,以保證獲取的通訊成本可以壓縮,在每個任務很短(明顯小于 1 秒)情況下,是值得調大的,而且推薦是 2 的冪。0 表示盡可能多拿。如果 1 個都不想多拿,那么除了設置 1 外,還需要 設置 task_acks_late 為 true,如果你的任務不是冪等(可以重復調用)的話,可能會有問題。詳細解釋參考: http://docs.celeryproject.org/en/latest/userguide/optimizing.html
task_acks_late = True
worker_prefetch_multiplier = 1
CELERYD_MAX_TASKS_PER_CHILD = n
worker_max_tasks_per_child = n
這個表示每個工作的進程/線程/綠程 在執行 n 次任務后,主動銷毀,之后會起一個新的。主要解決一些資源釋放的問題。
CELERY_TASK_RESULT_EXPIRES = s
result_expires = s
這個表示保存任務結果的時長,這個時間會被設置到 redis 里面(假設 backend 是 redis ),如果抓取數據量大的話,是可以縮短保存的時間,節省 backend 的資源( redis 主要是內存)消耗,默認是 24 小時( 86400 ),單位是秒。
===分割線===
已經 fetch 的任務,要么等執行完畢,要么等 kill 掉。要注意 soft kill 和 hard kill 的區別,沒記錯的話是 TERMINAL 和 kill -9 的區別。soft kill 會執行完當前的 task,但是,prefetch 的會丟失。在 pycharm 里,我第一次 ctrl+c 是軟 kill,可能會等上一會兒,第二次 ctrl+c 是硬 kill,直接停掉進程。
沒有 fetch 的任務可以 purge 清理調隊列中的。
根據選擇的 pool 類型不同,可以有 solo (單進程) prefork (進程池) threading (線程池) gevent (協程池)和 eventlet (協程池)。4.x 好像廢棄了線程池,主要的原因我猜可能和 GIL 有關。進程池比較耗內存,好處是所有工作線程資源都是隔離的,如果配置動態數量的挺好用。協程池 則對于 IO 密集型工作比較有優勢。所有的并發數量默認是 cpu core 的數量,4 核就是 4,可以根據實際情況調大。
總結
以上是生活随笔為你收集整理的worker进程和task进程区别_celery 每个 worker 在执行任务时,如何配置一定数量的 task?...的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 虚拟磁盘没有可用的合格服务器,VMwar
 - 下一篇: 电子游戏跟计算机有什么关联,电脑和电子游