Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php调用时使python脚本运行线程化_Php_Python_Python 2.7 - Fatal编程技术网

从php调用时使python脚本运行线程化

从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

我有一个PHP网页,可以对数据库进行多次查询,并在图表上显示结果

逻辑是,有index.php,可以在这里进行查询。提交数据后,将调用6个不同的PHP页面。PHP页面记录查询,运行适当的Python脚本,并使用Javascript制作图表。这6个PHP页面中的每一个都以divs的形式显示在index.PHP中。所有python脚本都具有相同的输入,并针对相同的数据库进行查询。不同之处在于从数据库中提取的数据以及生成图表的后续Javascript

调用其中一个PHP页面的示例:

$("#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脚本发出多个请求。