THẢO LUẬN

dạ vâng em đã dẫn nguồn rồi ạ ! Em sơ xuất quá ạ !

0
thg 8 10, 2018 3:38 CH

1.Qua gợi ý của bạn. Mình nghĩ ko nên dùng queues vì sợ mất data , time out các kiểu . 2. Cách trên bị hạng chế do độ trễ của mỗi jobs => jobs A chạy tốn 5s thì jobs B sẽ bị call trễ 5 giây Mình nghĩ ra giải pháp sau bạn góp ý vs nha

  1. cron job chạy 1 phút 1 lần query lấy process nào active = true;
  2. Nếu nó đang được kích hoạt thì mình cho nó vào vòng lặp while với điều kiện bên dưới
  public function shedule(){
    $total = $process->total;
    $result = array(
        'completed ' => 0
        'success' => 0,
        'error' => 0,
    );
    while ( ){ 
      if( Redis::get('active'.$process_id) == flase || $result['completed '] > $total ){
         break;
         $this->jobCompletedCallback($result);         
      }
      try{
          $this->doMyJobs();
          $result['success']++;
       }catch(Exception $e){
          $result['error']++;
       }
       $result['completed ']++;
       $this->saveResult($result);
       sleep(16);         
    }
  }
  public function doMyJobs(){
      // nhiệm vụ con
  }
  public function saveResult($result){
      // lưu tạm kết quả lên redis
  }  
  public function jobCompletedCallback($result){
      // nhiệm vụ xong lưu kết quả vào database và xóa mọi thứ trên redis
  }   
0
thg 8 10, 2018 2:30 CH

thanks bro, t có đổi cách viết, mong thím thích kiểu mới này =))

0
thg 8 10, 2018 2:29 CH

rất cảm ơn sự ủng hộ của anh, thú thực là tôi đã sai khi cố dặn ra thật nhiều chữ cho đạt yêu cầu, đã cải tạo lại cho bớt lan man =))

0
thg 8 10, 2018 1:47 CH

Ngoài ra thay vì tạo một lúc 5000 rows, nếu có thể bạn có thể chỉ set các job con cho phút đầu tiên, sau mỗi mỗi job con sẽ có callback để init job con kế tiếp gối nhau như thế. Tuy nhiên làm thế này sẽ phải handle error tốt nếu không muốn đang chạy thì đứt gánh 😃

0
thg 8 10, 2018 1:37 CH

Bài này của anh Trần Trọng Thanh bên Nâu Studio. Mình nghĩ bạn nên ghi nguồn và thêm link gist của anh ấy thì bài của bạn có giá trị hơn.

+1
thg 8 10, 2018 12:45 CH

@MinhDuc redis về cơ bản nó cũng là một dạng db, đọc ghi bình thường mà 😃

Giả sử user huỷ job lớn thì set một cái key “<job_id>_cancelled” value true.

Trước khi chạy job con nào thì check cái key đó, true thì return luôn không cho chạy nữa chẳng hạn.

+1
Avatar
đã bình luận cho bài viết
thg 8 10, 2018 11:43 SA

vậy bác có gặp tình trạng hay nhảy pointer lung tung và mất chữ ko?

0
Avatar
đã bình luận cho bài viết
thg 8 10, 2018 11:06 SA

Mình cũng đang dùng trên Ubuntu 18.04 đây, nó bị sao vậy bạn.

0
Avatar
đã bình luận cho bài viết
thg 8 10, 2018 11:06 SA

Thank man ^_^

0
thg 8 10, 2018 10:56 SA

Chào bạn. Các trên gặp một vấn đề là Khi Người dùng dừng tiến trình. Thì các Jobs buộc phải bị hủy. Nếu vậy. Trong jobs ta vẫn phải request tới database để kiểm tra trạng thái của tiếng trình 😦

+1
thg 8 10, 2018 10:55 SA

Mình đang cần cái này. thanks bạn nhé.

0
thg 8 10, 2018 10:53 SA

@bs90 : Bác Nói đúng ý em rồi Đơ là do em sử lý bacnkend cả triệu reuqest một lúc 😦 Vì Khi người dùng tạo ra một tiến trình . Ngay lập tức trong backend của em sẽ tạo 5000 rows chứa Thông tin về Jobs của Tiến trình Vừa tạo. => em nói thêm là cứ mỗi lần request thành công em sẽ tính phí người dùng.

Giải pháp ném lên Redis : Gặp một ván đề là khi người dùng hủy tiến trình thì các Jobs của tiến trình đó phải hủy theo. 😦

0

Rất dễ hiểu, cảm ơn bác

0
thg 8 10, 2018 8:46 SA

@HoanKi Tôi thấy bài viết này rất hay và hữu ích. Cảm ơn!

+2
Avatar
đã bình luận cho bài viết
thg 8 10, 2018 7:20 SA

mình dùng trên ubuntu 18.04 nó ko được ổn lắm

0
thg 8 10, 2018 7:10 SA

Mình góp ý chút:

  • Câu 1: https://github.com/jupeter/clean-code-php, mọi người có thể tham khảo thêm tại đây nhé
  • Câu 2: PHP ngày một chặt chẽ lên rồi đặc biệt là từ version 7.0 trở lên, hỗ trợ type hints, return types rồi lên 7.2 có cả visiblity cho constant.
  • Câu 5: Biết càng rộng thì càng tốt nhưng nhất thiết là phải thật sâu vào 1 cái trước đã, chứ cái gì cũng biết mà không cái gì sâu thì cũng hơi tù.
+1

@yukihoaian Bạn mới học iOS sơ sơ + add vào dự án thì chắc là sẽ có người hướng dẫn bạn phải không. Mình nghĩ tốt nhất là bạn nên chủ động hỏi người hướng dẫn của bạn. Vì người đó (có thể) là người rõ nhất về cả business và code, nên giải pháp của người đó sẽ chính xác hơn cả.

Còn cái này

Message from debugger: Terminated due to memory issue"

có thể là vì bạn load quá nhiều video 1 lúc, dẫn đến việc tràn bộ nhớ (app dùng nhiều RAM quá bị out)

Trong trường hợp này bạn chỉ nên chạy 1 video 1 lúc, các video chưa chạy sẽ không load AVPlayer lên, mà chỉ hiển thị ảnh thumbnail cho nó. Đơn giản vì người dùng cũng không cần thiết phải xem 2 video chạy 1 lúc, việc đó chỉ làm app của bạn tốn nhiều bộ nhớ hơn mà thôi.

+1

Góp vui cách tương ứng với số 3 mà cái này để format input khi gõ số (gõ tới đâu nó format tới đó). Em cũng GG trong quá trình làm việc thôi mong ae không ném đá ^^. Hic ko biết format code ntn ae thông cảm.

//use format_number('#cus_task_price');

format_number = function(id){

    $('body').on('keydown',id,function(event) {
        if( event.ctrlKey === true ){
            if( event.keyCode != 86 ){
                event.preventDefault();
            }
        }else if(event.keyCode == 8 || event.keyCode == 9  ){
        }else if( ( event.keyCode < 48 || event.keyCode > 57 ) && (event.keyCode < 96 || event.keyCode > 105)){
            event.preventDefault();
        }
    });

    $('body').on('keyup',id,function(event) {
        var temp = $(this).val().replace(",", '');
        temp =  temp.replace(/\,/g,"");
        $(this).val( temp.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,") );
    });
};
+1

@thangtd90 Theo em hiểu thì vấn đề của bạn ấy là thế này

  • Có 1 job to phải thực hiện làm 5000 lần 1 job nhỏ, mỗi lần cách nhau 16s
  • Mỗi job nhỏ thì 1 lần curl 3 lần, tốn tài nguyên chắc là tốn bandwidth (?)
  • Cần phải log lại kết quả của từng job nhỏ

Schedulling hay crontab thì chỉ chạy được theo từng phút, hiện bạn đang xử lý thế nào để cứ 16 giây lại xử lý 1/5000 của job nhỉ?

  • Bạn ý có ghi rồi, là có time_start cho từng job, từng phút thì lấy các job đã đến giờ chạy ra để chạy (1 job to thì 1 phút có 3,4 job con được chạy)
  • Vụ web đơ em cũng đang hỏi 😄 Đợi bạn ấy vào confirm rồi nghĩ xem có cách nào không 😄
+1
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí