gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Как сделать асинхронный вызов для парсера из PHP?

Ловлю deadlock..., почему - видимо что-то не так понимаю
// threads.php
  // dummy файл, чтобы загрузить процесс чем-нибудь, пока выполняется функция
  require_once 'functions.php';

  // EOF


// functions.php
  // файл-библиотека функций

  defined($var = '__APPDIR__') or define($var, dirname(__FILE__));
  
  // _doAsync
  // выполняет "асинхронную" команду
  if (!function_exists("_doAsync")):
    function _doAsync(Callable $async_func) {
      $path = realpath('threads.php');
      $spec = array(
        0 => array('pipe', 'r'),
        1 => array('pipe', 'w'),
        2 => array('pipe', 'r')
      );
      $pipes = array();
      $h = proc_open(sprintf('php %s', $path), $spec, $pipes, $cwd = __APPDIR__, $env = null);

      // start async
      $async_func();
      // end async

      $stdout = stream_get_contents($pipes[1]);
      fclose($pipes[0]);
      fclose($pipes[1]);
      fclose($pipes[2]);
      proc_close($h);

      return $stdout;
    }
  endif;

  // EOF


// action.php
  // файл команды для приложения
  
  require_once 'functions.php';
  $res = _doAsync(function () {
    echo 123;
  });

  // EOF
  • Вопрос задан
  • 565 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽