我有一項任務要求我使用海量數據同步,PHP由於腳本的執行時間很短而無法處理。我的選擇是啓動一個Python腳本並讓PHP終止(給用戶提供「成功完成」等信息)。我嘗試了所有的選項,我可以在這裏找到SO和其他地方,我通過谷歌發現,但沒有任何作品。從PHP啓動獨立Python進程
在我第一次嘗試失敗後,我想出了這個想法,我的PHP腳本將啓動第一個Python腳本(可以稱之爲testcmd.py
)。然後他們將啓動Python腳本並獨立進程(我們稱之爲thecommand.py
),它不受其束縛(像分離線程那樣)並終止。這將避免在同一時間掛PHP腳本完成我想要
不幸的是,我還沒有找到從testcmd.py
我已經嘗試了很多事情,但這裏是我當前的代碼獨立開展thecommand.py
的方式。如果你對如何做到這一點有更好的想法,我會很樂意走這條路。
run_command.php
$cmd = "./testcmd.py";
$output = [];
exec("$cmd 2>&1", $output, $return_status);
print_r($output);
echo $return_status;
testcmd.py
#!/usr/bin/env python
import subprocess
import sys
# some code here
print "Launching Command"
#proc = Popen([cmd_str], shell=True,
# stdin=None, stdout=None, stderr=None, close_fds=True)
pid = subprocess.Popen([sys.executable, "/path/to/file/no/spaces/in/path/thecommand.py"], stdin=None, stdout=None, stderr=None, close_fds=True) # call subprocess
thecommand.py
#!/usr/bin/env python
import json
import urllib2
url = 'http://some/api/url/here/2'
data = urllib2.urlopen(url).read()
js = json.JSONDecoder().decode(data)
for user in js:
print js
所以基本上你說cron一個工作,運行5分鐘,然後檢查數據庫條目,一旦它完成標記不知何故? 5分鐘後如何定期檢查添加到服務器負載?我想只是想聽到 – 2014-10-11 09:27:57
這是正確的重新標記數據庫中的條目。重新加載服務器,並不是那麼多,就好像沒有任何東西需要處理,那麼這個過程就可以退出。我的建議和你的想法之間唯一的區別是定期發佈時間。除此之外,您的流程執行將會出現大部分負載。無論如何,這都會發生。 – acorncom 2014-10-11 13:05:13
酷感謝很多哥們 – 2014-10-12 20:58:22