2012-06-20 54 views
0

我正在研究一個PHP腳本,它用不同的參數實例化同一類的三個對象。這些對象反過來運行無限持續時間的方法(如Cron作業),因此,下一行或第二行永遠不會開始。多線程方法php

所以,如果我有

$a = new CronJob('Listing', '2010-04-01T00:00:01', '2010-04-01T00:30:01', 'A', 'BUSO'); 
$s = new CronJob('Listing', '2010-04-01T00:00:01', '2010-04-01T00:30:01', 'S', 'BUSO'); 
$p = new CronJob('Listing', '2010-04-01T00:00:01', '2010-04-01T00:30:01', 'P', 'BUSO'); 

$s因爲$a永遠不會執行運行無限時間

我怎樣才能解決這個得到什麼?我想用不同的腳本運行它們,但我不想讓3 * (#object types)同時運行它們。

+0

「但我不想讓3 *(#object類型)同時運行它們」爲什麼不呢? – goat

+0

因爲我有8個其他的'BUSO'字段來執行 – jmishra

+0

我相信你剛說的話對你有意義,但對我來說沒有意義。 – goat

回答

0

你考慮過嗎?PHP threading

這是關於PHP threading issues的另一個SO討論。

+0

小心評論我爲什麼回答不好? OP想要一次執行多個長時間運行的事情,那爲什麼不進行線程呢? – curtisdf

+0

我猜測是因爲Pcntl_fork會創建一個新的孩子pid,只有這個。在父線程中發生的任何阻塞仍然存在於子線程中。這打破了嘗試多任務的目的。你應該真的看看semiphors。 –

1

老實說,你最好的選擇是做單獨的cron工作。 PHP本身並不支持多線程,許多黑客爲了讓它工作而花費很大。

看看這個堆棧溢出問題:How can one use multi threading in PHP applications

更新:

想來也拋出這個想法在那裏爲Gearman。如果您可以添加外部擴展,請下載PECL包並進行安裝。您需要本地系統上的齒輪箱。