簡體   English   中英

通過Cron實現PHP並發

[英]PHP Concurrency via Cron

我有一些腳本需要作為單獨的進程並發運行。 我的計划是讓一個cron作業以設定的間隔執行這些腳本的多個實例。 這是一個好主意嗎? 這種方法的優點/缺點是什么? 我還需要考慮其他選擇嗎?

底線:我正在嘗試模仿多線程。 任何競爭條件都將通過代碼處理(例如,在DB中設置狀態等)。 腳本應該處理密集型任務(例如創建縮略圖等)。

你可以使用分叉。 啟動腳本將加載所有默認配置和初始化,然后派生子進程進行處理。 然后,它可以監視進程以查看它們是否仍在運行。 http://php.net/manual/en/function.pcntl-fork.php

好吧,如果你需要它作為cronjob,請繼續。 如果您想要多個進程,則很可能希望使用pcntl_fork來創建同一腳本的多個實例。

根據您對這些作業的反應速度,如果您正在尋求處理器密集型任務,那么您還可以使用排隊系統進行處理。 如果您有多個核心/處理器,請檢查每台機器上有多個工作人員的Gearmanbeanstalkd

PHP沒有fork()嗎? 雖然這不是真正的多線程,但它是協同例程的基本方式。

使用cron的一個方面是它將以您設置的間隔執行腳本的副本,而不管已經運行了多少腳本進程。 這意味着腳本需要一種相互通信的方式,以便最多同時運行N個腳本(多余的腳本可以立即退出)。

cron的替代方案可以是supervisord ,它將執行可配置數量的腳本並監視每個腳本,以便重新生成任何退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM