Как обрабатывать несколько задач в codeigniter cli одновременно - PullRequest
0 голосов
/ 17 сентября 2018

Я не уверен, выполнимо ли это или нет. Я запускаю cron для обработки данных, и они все независимы друг от друга. Например, у меня есть данные [x, y, z], и у меня есть метод в родительском контроллере, который делает то, что ему нужно. Процесс занимает немного много времени, и, следовательно, моя очередь накапливается, потому что он делает по одному. Я пробовал процесс разветвления, но он теряет связь с базой данных Монго. Поэтому мне пришлось удалить вилку на данный момент, но, пожалуйста, дайте мне знать, если я смогу восстановить соединение. ПСЕВДОКОД

MyTools.php
class MY_Tools extends CI_Controller {
    ...
    public function process($item) {
        Make curl request
        Update database for the item
   }
}
Tools.php
class Tools extends MY_Tools {
    ...
    public function getAllDate() {
        $data = fetchDataFromDB() => [X,Y,Z]
        $i = 0
        while ($i < sizeof($data) { 
            $this->process($data[$i]);
            $i++;
        }
   }
}

если я смогу сделать это, не дожидаясь завершения другого процесса и просто продолжая, это будет здорово

Кроме того, я использую php7 библиотека cimongo для codeigniter и https://github.com/alcaeus/mongo-php-adapter

Возможное решение Для php7 я использовал это для установки gearman https://techearl.com/php/installing-gearman-module-for-php7-on-ubuntu

Библиотека редуктора Codeigniter, которую я использовал: https://github.com/appleboy/CodeIgniter-Gearman-Library

Чтобы преодолеть статический метод доступа к родительскому контроллеру, используйте метод singleton Я боролся с этим немного и, надеюсь, это поможет кому-то

Пример

class MY_Tools extends CI_Controller {
    private static $instance;
    function __construct() {
        parent::__construct();
        self::$instance =& $this;
    }
    public static function get_instance()
    {
        return self::$instance;
    }
}

Для доступа MY_Tools::get_instance()->YOUR_PUBLIC_METHODS();

Надеюсь, что это может кому-то помочь

...