我有一项任务要求我使用海量数据同步,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