大米CMS官网论坛,大米站长联盟,大米站长之家,大米开发者社区

 找回密码
 注册大米会员

QQ登录

只需一步,快速开始

查看: 1788|回复: 0
打印 上一主题 下一主题

多进程加锁入库实例

[复制链接]

500

主题

777

帖子

7657

积分

超级版主

Rank: 8Rank: 8

积分
7657

授权用户

跳转到指定楼层
楼主
发表于 2022-12-16 16:20:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. <?php

  2. class caijitodb extends Controller
  3. {
  4.     public function run($params = null)
  5.     {
  6.         ini_set('memory_limit', '2048M');
  7.         $this->config->set('config_weight_class_id', 1);
  8.         $this->config->set('config_language', 'en-gb');
  9.         $this->config->set('config_language_id', 1);
  10.         $this->config->set('config_length_class_id', 1);
  11.         try {
  12.             $start_id=0;
  13.             $start_file = __DIR__ . DIRECTORY_SEPARATOR . 'todb.txt';
  14.             if (is_file($start_file)) {
  15.                 clearstatcache();
  16.                 a:
  17.                 $fp = fopen($start_file, 'r+');
  18.                 $start_id = @fgets($fp);
  19.                 var_dump($start_id);
  20.                 if ($start_id === false) {
  21.                     sleep(1);
  22.                     echo '等待解锁'.PHP_EOL;
  23.                     goto a;
  24.                 }
  25.                 flock($fp, LOCK_EX);// 加锁
  26.                 //$start_id= (int)file_get_contents($start_file);
  27.             } else {
  28.                 echo $start_file.'文件不存在';
  29.                 exit();
  30.             }
  31.             $start_id = intval($start_id);
  32.             $sql = "select * from i8_pipe where status=0 and id>{$start_id} order by id asc limit 100";
  33.             $query = $this->db->query($sql);
  34.             $rows = $query->rows;
  35.             if ($rows) {
  36.                 $ids = [];
  37.                 $total_num = count($rows);
  38.                 $last_num = ($total_num-1)*1;
  39.                 $start_id = $rows[$last_num]['id'];
  40.                 fseek($fp, 0);
  41.                 fwrite($fp, $start_id);
  42.                 flock($fp, LOCK_UN);// 解锁
  43.                 fclose($fp);
  44.                 foreach ($rows as $k => $row) {
  45.                     $data = json_decode($row['data'], true);
  46.                     if ($data) {
  47.                         try {
  48.                             $r = $this->load->controller('api/product/add', $data);
  49.                             if ($r) {
  50.                                 $ids[] = $row['id'];
  51.                                 echo time() . " " . $row['id'] . " into db success" . PHP_EOL;
  52.                             } else {
  53.                                 echo time() . " " . $row['id'] . " fail" . PHP_EOL;
  54.                             }
  55.                         }catch (\Exception $exception){
  56.                             echo time() . " " . $row['id'] . " fail" . PHP_EOL;
  57.                         }
  58.                     }else{
  59.                         $sql = "delete from i8_pipe where id = ".$row['id'];
  60.                         $this->db->query($sql);
  61.                     }
  62.                 }
  63.                 if ($ids) {
  64.                     $sql = "update i8_pipe set status=1 where id in(" . join(',', $ids) . ")";
  65.                     $this->db->query($sql);
  66.                     echo time().' success'.PHP_EOL;
  67.                 }
  68.             } else {
  69.                 flock($fp, LOCK_UN);// 解锁
  70.                 fclose($fp);
  71.                 echo 'finished';
  72.                 exit;
  73.             }
  74.             $this->run($params);
  75.         } catch (\Exception $exception) {
  76.             echo $exception->getMessage().PHP_EOL;
  77.             if($fp){
  78.                 flock($fp, LOCK_UN);// 解锁
  79.                 fclose($fp);
  80.             }
  81.         }
  82.     }
  83. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册大米会员

本版积分规则

QQ|小黑屋|大米CMS社区 ( 蜀ICP备11002200号-2广告联系:广告联系 

Powered by 大米CMS

© 2010-2020 大米CMS Inc.

快速回复 返回顶部 返回列表