1. PHP / Говнокод #26602

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    for ($cycle = 1; $cycle <= 6; $cycle++) {
        $all_tasks = get_all_tasks();
        if ($all_tasks) {
            foreach($all_tasks as $one_task) {
                $lock_file_abs = __DIR__.'/locks/run_'.$one_task['id'];
                $fp = fopen($lock_file_abs,"w+");
                if (flock($fp, LOCK_EX | LOCK_NB)) {
                    solve_one_task($one_task);
                    flock($fp, LOCK_UN);
                }
                else {
                    #не можем запускать обработку задачи
                }
                fclose($fp);
                unlink($lock_file_abs);
            }
        }
        sleep(10);
    }

    «Как запускать cron чаще, чем раз в минуту при помощи PHP»
    https://habr.com/ru/post/498934/

    Запостил: gost, 25 Апреля 2020

    Комментарии (19) RSS

    • В представленном виде есть одна неопределенность, а именно — повторное
      выполнение задачи в случае, если она уже начата. Это становится особенно
      актуально, если задача «сложная» и требует несколько секунд на ее реализацию.
      
      Таким образом создается проблема повторного выполнения:
      
      ● Функция solve_one_task() уже запущена, но еще не завершила свою работу;
      ● Следовательно, в базе данных до сих пор задача отмечена как невыполненная;
      ● Следующий цикл опять получит эту задачу и запустит функцию solve_one_task()
      еще раз, с этой же самой задачей.
      
      Разумеется, это можно решить, например, изменением какого-то статуса в базе данных по этой задаче.
      
      Но мы не будем нагружать базу данных: исходя из моего тестирования, MYSQL
      может принять запрос, но обработать его не сразу. Различие даже в 0.5 секунд
      может привести к повторному выполнению — что категорически не подходит.

      Именно поэтому я против «MYSQL».
      Ответить
      • лол, опять квадратноколесные велоспеды

        Задачи можно хранить в MSMQ или RabbitMQ.
        Выполнять можно через spring-integration или apache camel и celery: там везде уже стоит защита от "повторого выполнения"

        но пыхоблядь слишком тупа, и думает, что кроме mysql и крона ничего нет на свете
        наверняка там еще есть свой класс Db
        Ответить
        • https://www.php.net/manual/ru/book.zmq

          https://www.php.net/manual/en/intro.mqseries.php

          https://www.php.net/manual/en/book.sem

          https://www.php.net/manual/en/book.gearman.php

          https://www.php.net/manual/en/book.stomp.php

          https://framework.zend.com/manual/1.12/en/zend.queue.introduction.html

          http://web.archive.org/web/20180418234618/rediska.geometria-lab.net/documentation/integration-with-frameworks/zend-framework/zend_queue-adapter/
          Ответить
          • Разумеется там всё есть, но пыхеры этим не пользуются.
            Брейн демдж их настолько глубок, что им физически не представить себе что задачу можно решить чем-то кроме крона и майсикула.

            Главная проблема пых же не в том, что он язык говеный (питон тоже так себе язык местами), а в том, что пхп портит мозги.

            Эти говнорешения с кроном и мускулем он же не с потолка взял: они описаны в книгах, на форумах, всё коммунити о нем знает. Говно -- часть философии
            Ответить
    • Да, а больше всего доставляет подпись автора статьи:
      Roman @RomanRuzin
      Специалист по автоматизации бизнес процессов

      Какая автоматизация бизнес-процессов )))
      Ответить
      • Автоматизация бизнес-процессов посредством говноскрипта на пхп, выполняемого по крону
        Ответить
      • несколько раз в минуту отправлять сотрудникам браузерные уведомляшки "работай тварь"
        Ответить
    • Какой велик )))
      Ответить
    • Не могу найти, но я такое же своё говно вылаживал.
      Ответить
    • ебанутые долбоёбы

      https://www.freedesktop.org/software/systemd/man/systemd.timer.html
      https://www.freedesktop.org/software/systemd/man/systemd.time.html

      А вообще конечно
      http://www.celeryproject.org/
      и в пизду крон
      Ответить
      • там в комментариях ему настойчиво рекомендуют supervisord, хорошо что не pm2
        Ответить
    • > Для некоторых задач по автоматизации бизнес процессов максимально допустимая задержка часто составляет не более чем 1-1.5 секунды.
      - интересно, что это за задачи? Выгружать в csv данные о том, сколько галерные макаки мышкой не щёлкали, сидя на удалёнке?
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • i will data parsing
        i will create cartoon avatar profile picture

        сразу видно успешного программиста
        Ответить

    Добавить комментарий