2013-06-28 37 views
-1

我有一個gearman服務器,在後臺有一個php worker腳本(由supervisord管理)。該過程是異步的,所以主腳本不必等待。Gearman php-workers:請求fork進程

問題是,我不需要工人100%的時間在後臺,我只需要它時,有一個工作的工作。有沒有什麼辦法可以避免後臺php進程?例如一些腳本,將監測傳入的任務和執行適當的PHP文件?

的解決方案,我心目中是創建一個殼素文字,將執行PHP代碼,類似:

gearman -w -f 'my_func' ./my_func_exec.sh 

其中my_func_exec.sh:

php -q my_func.php 

但是我應該如何通過工作量到my_func.php?還是有現成的解決方案?

回答

1

首先,我認爲你不應該擔心後臺工作者:它閒置的開銷接近於零,但它開始和停止的開銷不是。

你還會碰到很多鎖的煩惱,避免併發客戶端請求啓動一個以上的

這就是說,這裏是你的使用情況的模式:

  • 定義flagfile和觸摸它在啓動時(這是很重要的:文件現有手段工人運行)
  • 的客戶端來說,要消耗你的工人,unlink()的IT,保持返回值
  • 如果這個返回值是真的,那麼這個線程是解除鏈接文件的線程,並且已經獲得了對工人創建的鎖定:所以他通過shell_exec()創建了一個工作者 - 請小心在後臺啓動它。 /path/to/php php -q /path/to/my_func.php &
  • 客戶端等待工人變得可用,並提交作業
  • 工人不使用正常while($worker->work());環,但單呼,然後寫flagfile和結束。
+0

併發客戶端請求不是問題,實際上shell會分叉php進程,這對我的情況很好。問題是將工作負載發送到php腳本。我怎麼做?如果我將shell腳本註冊爲worker,腳本將接收所有工作負載,而不是php-worker。 – user2531657

+0

工人PHP腳本在啓動後立即註冊爲工作人員 - 因此您不需要註冊shell腳本。 –