$num = 5;
$flock_t = true;
do{
for($i = 1; $i <= $num ; $i++ ){
$file_name = $i . '.txt';
if(is_file($file_name)){
var_dump( $i . "____等待任务执行中.....<br/>");
}else{
$file_info = fopen($file_name,"w+" ); //读取文件
var_dump($i . "____执行任务中<br/>");
usleep(5000);
fclose($file_info);
unlink($file_name);
exit;
}
}while($flock_t);
1.想弄个列队,5个任务的任务池(5个文件代替数据库),没用数据库是,执行一个任务才5秒时间,用数据库太浪费时间了!
2.上面的代码想实现效果是:
1步骤。判断文件是否存在,存在就找下个文件(总共5个文件)
2步骤。如果不存在就-----》创建文件-----》执行任务-----》任务完成删除文件-----》结束程序!问题出在,请求是批量请求的:同时50个请求进来,结果一堆的请求直接执行到 2步骤!然后各种报错。有试过用flock 锁文件的方式,也会出现类似的问题,多个请求的时候,能直接访问到锁住的文件。
worker();
sleep(5);
}