从php调用时使python脚本运行线程化
我有一个PHP网页,可以对数据库进行多次查询,并在图表上显示结果 逻辑是,有index.php,可以在这里进行查询。提交数据后,将调用6个不同的PHP页面。PHP页面记录查询,运行适当的Python脚本,并使用Javascript制作图表。这6个PHP页面中的每一个都以divs的形式显示在index.PHP中。所有python脚本都具有相同的输入,并针对相同的数据库进行查询。不同之处在于从数据库中提取的数据以及生成图表的后续Javascript 调用其中一个PHP页面的示例:从php调用时使python脚本运行线程化,php,python,python-2.7,Php,Python,Python 2.7,我有一个PHP网页,可以对数据库进行多次查询,并在图表上显示结果 逻辑是,有index.php,可以在这里进行查询。提交数据后,将调用6个不同的PHP页面。PHP页面记录查询,运行适当的Python脚本,并使用Javascript制作图表。这6个PHP页面中的每一个都以divs的形式显示在index.PHP中。所有python脚本都具有相同的输入,并针对相同的数据库进行查询。不同之处在于从数据库中提取的数据以及生成图表的后续Javascript 调用其中一个PHP页面的示例: $("#chart
$("#chartFOO").load("http://example/test/get_foo.php? bar=".concat(bar)+"&start=".concat(start)+"&end=".concat(end), function(responseTxt, statusTxt, xhr){
if(statusTxt == "error")
alert("Error: " + xhr.status + ": " + xhr.statusText);
});
调用Python脚本的示例:
if ($msisdn) {
$command = escapeshellcmd("/home/example/scripts/graph_foo.py $bar $start $end");
$output = shell_exec($command);
}
然后在PHP文件中使用输出来制作图表。所有PHP文件在index.PHP上以不同样式的div显示
问题是,它不会在多个线程上运行它们,并锁定系统,这使得查询的响应时间非常慢。是这样吗,一次只能运行一个shell命令
我尝试将所有Python脚本作为函数,将6个PHP文件作为字符串放在一个文件中。试图用一个命令调用它,但是到目前为止,我在格式化PHP文件时遇到了问题,我不能使用“{}”来格式化,因为PHP文件已经包含了这些文件。有想法使用线程模块,来运行函数。并使用一个数据库连接,以节省连接6次的时间,因为每次都需要时间
有没有什么合理的解决方案可以让脚本线程化运行,而不必重做整个网页?PHP、Javascript和Python如何混合
有很多东西要读,也有很多东西要问,但是谢谢你提前抽出时间
编辑:
我创建了一个新文件,其中基本上包含所有6个文件。但是调用Python脚本现在有点不同了。从index.php现在只调用这一个文件,就像我以前使用6个文件所做的那样
新方法示例:
$part->handles = [
popen("/home/example/scripts/graph_foo.py {$bar} {$start} {$end}", 'r'),
popen("/home/example/scripts/graph_foo2.py {$bar} {$start} {$end}", 'r')
];
我解决内存问题的方法是:
$output0 = '';
while (!feof($part->handles[0])) {
$output0 .= fread($part->handles[0], 32768);
}
$output1 = '';
while (!feof($part->handles[1])) {
$output1 .= fread($part->handles[1], 32768);
}
不知道这是不是最好的方法,但有效。我不太懂PHP。但是它确实减少了0.5分钟的请求时间,这很有帮助 您的php脚本是否使用会话?PHP会锁定会话,因此每一个下一个请求都必须等到之前的所有请求都完成。是的,index.PHP在开始时有会话控制,6个PHP文件也是如此。这就是为什么如果我知道如何将6个文件合并到1个文件中会很好的原因。也许这对您有用:我有点困惑,我调用了6个不同PHP文件中的脚本。如果如你所说,如果会话涉及,我不能同时提出多个请求。这有什么帮助。我仍然一次只能运行一个PHP文件。不,您只需要一个PHP脚本就可以对python脚本发出多个请求。