我已經安排了CRON工作,每4小時運行一次,需要收集用戶帳戶信息。 現在我想加快速度並在幾個進程之間分割工作,並使用一個進程來更新MySQL數據庫與其他進程的檢索數據。PHP線程池?
在JAVA中,我知道有一個線程池,我可以用一些線程來完成一些工作。
我該如何在PHP中做到這一點?
歡迎任何建議。
謝謝
我已經安排了CRON工作,每4小時運行一次,需要收集用戶帳戶信息。 現在我想加快速度並在幾個進程之間分割工作,並使用一個進程來更新MySQL數據庫與其他進程的檢索數據。PHP線程池?
在JAVA中,我知道有一個線程池,我可以用一些線程來完成一些工作。
我該如何在PHP中做到這一點?
歡迎任何建議。
謝謝
正如其他人所說,分叉過程比使用PHP產卵線程更容易。但是,爲什麼你認爲有一個專用線程將結果寫回數據庫是個好主意?雖然這與線程而不是進程稍微簡單一些,但它仍然是一個複雜的開銷,似乎並沒有爲總體目標增加任何價值。
事實上,從cron啓動腳本的幾個實例(用一些參數來分區數據),而不是從PHP代碼中啓動一個分支 - 而且沒有任何瓶頸來記錄數據回到數據庫中。
C.
這是一個很好的選擇,IMO比分叉處理好得多。 你有沒有想法如何分割數據,我應該運行多少個實例而不是系統開銷? 我在想3個實例。 – embedded 2010-04-08 06:39:54
儘可能多的實例。如果數據由序列號或其他數字標識,則使用MOD來獲得每個第N種情況,例如, 'SELECT * FROM mytable WHERE MOD(id,$ number_of_instances)= $ this_instance_id'(記得運行第0個實例) – symcbean 2010-04-08 11:49:28
謝謝我會看看MOD選項。 – embedded 2010-04-08 14:12:18
PHP可能不是最適合多線程的語言。
您可能想看看不同的解決方案。例如,Thrift允許您將PHP前端與Java後端進行交談,您可以在其中輕鬆實現所需的行爲。
如果您仍然想這樣做在PHP中,你可能想看看到:
再檢查一下這些帖子 - * http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html * http://www.electrictoolbox.com/article/php/process-forking/
基本上你需要在進程之間共享數據,正如我所見,你可能需要寫入一些文件第一。使用主進程(使其成爲ajax輪詢類型進程)並寫入數據庫。
你是什麼意思由ajax-polling類型的過程? 我想我會走你的路和叉一些進程來完成任務 並將結果追加到文件。 主進程將獲取文件中當前可用的所有記錄,清除該文件,然後釋放鎖並將處理它們。 我將在專用文件上使用鎖定以防止對文件進行多路訪問。 你對這種行爲有什麼看法? – embedded 2010-04-07 12:09:54
這種行爲正是我想到的。在你的情況下,由於它是cron-job,它將以特定的時間間隔繼續運行,並從文件中收集數據,然後寫入數據庫。 Ajax輪詢將用於Web服務器方法,您可以使用JavaScript來製作ajax請求而不是cron作業。 – pinaki 2010-04-07 12:21:47
我想我會實現這一點,並使用它時,我看到我的cron作業執行需要超過4個小時。 在網絡託管方面,我需要確保pcntl庫已啓用? – embedded 2010-04-07 12:28:14
您可以在PHP中派生新進程過於:pcntl_fork()
BTW。該腳本運行時間超過4小時?否則,我看不出有什麼理由使它與線程或流程管理複雜化。
這可以動態更改。 這取決於使用我的服務的用戶數量。 我將只在腳本執行時間超過4小時時使用這種機制 – embedded 2010-04-07 12:13:31
PHP和Threads(這兩個詞)不能在同一句話中一起出現。 PHP不提供線程支持。你可以嘗試pcntl分叉機制或異步處理,在你的情況下這是不是有用的。
你可以使用一個工作量分配機制,可能是你想看看Gearman(建議你谷歌它)。
正如其他人所描述的「它是一個分佈式分岔機」,它可以提供您正在尋找的工作負載分配以「加快速度」。
問候,
您也可以看看這篇文章,說明如何模擬線程,使用異步HTTP調用包括線程池管理器和Web服務器:
http://w-shadow.com/blog/2008/05/24/improved-thread-simulation-class-for-php/
尼斯過程池Arbow on github 隨着修改提到here
cron作業執行什麼?運行php腳本的服務器的shell腳本和/或php腳本和/或頁面請求? – zaf 2010-04-07 11:58:47
一個PHP腳本,它使用curl庫來解析某些用戶帳戶數據。 – embedded 2010-04-07 12:16:21