使用PHP和计时器启动和终止后台python脚本

使用PHP和计时器启动和终止后台python脚本,php,python,mysql,timer,Php,Python,Mysql,Timer,我要做的事情有点复杂 我有一个python脚本,我想从PHP运行它,但在后台运行。我在某个地方看到,要在后台运行python脚本,我必须使用PHP命令exec(script.py)来运行,而不必等待返回:到目前为止,没有问题 第一个问题: 我必须用另一个PHP命令停止这个循环脚本,如何做到这一点 第二个问题: 我必须实现一个服务器端计时器,它在时间结束时停止脚本 我发现这个代码: <?php $timer = 60*5; // seconds $timestamp_file = 'end_

我要做的事情有点复杂

我有一个python脚本,我想从PHP运行它,但在后台运行。我在某个地方看到,要在后台运行python脚本,我必须使用PHP命令
exec(script.py)
来运行,而不必等待返回:到目前为止,没有问题

第一个问题:

我必须用另一个PHP命令停止这个循环脚本,如何做到这一点

第二个问题:

我必须实现一个服务器端计时器,它在时间结束时停止脚本

我发现这个代码:

<?php
$timer = 60*5; // seconds
$timestamp_file = 'end_timestamp.txt';
if(!file_exists($timestamp_file))
{
  file_put_contents($timestamp_file, time()+$timer);
}
$end_timestamp = file_get_contents($timestamp_file);
$current_timestamp = time();
$difference = $end_timestamp - $current_timestamp;

if($difference <= 0)
{
  echo 'time is up, BOOOOOOM';
  // execute your function here
  // reset timer by writing new timestamp into file
  file_put_contents($timestamp_file, time()+$timer);
}
else
{
  echo $difference.'s left...';
}
?>

从答案来看


那么,有没有一种方法可以在MySQL数据库中实现它?(与脚本停止的集成不是问题)

这实际上相当简单。您可以使用内存对象缓存系统。我建议
memcached
memcached
中的内存对象可以从系统中的任何位置进行访问。唯一的要求是支持到memcached后端服务器的连接。(PHP有,Python有,等等)

回答第一个问题:

memcached
数据库中创建一个名为
stopme
的变量,其值为
0

从python脚本连接到memcached数据库,并永久读取变量
stopme
。假设python脚本在变量
stopme
具有值
0
时运行

要从PHP停止脚本,请将PHP脚本连接到memcached服务器,并将
stopme
设置为1

python脚本立即接收更新的值并退出

回答第二个问题:

通过读取共享变量,可以像我之前的回答中所解释的那样完成,但另外我想提到的是,您也可以使用cronjob来终止正在运行的脚本。

使用它来获取进程ID,将其存储在文件或数据库中,然后稍后只终止具有该ID的进程。请记住,无论进程多么小,它都可能已经停止,而另一个进程最终使用了该ID(这意味着您正在终止另一个进程)