#php #многопоточность
Столкнулся с проблемой выполнения функции в функции и все это классе библиотеки (использую готовую библиотеку для работы потоков PHPThreads).Я передаю ей в качестве аргумента глобальный массив с данными.Необходимо чтобы функция выполнялась в функции класса корректно. Сам код: Create(function() { Eacher($mas); }); $Thread->Run(); ?>
Ответы
Ответ 1
В вашем коде есть две проблемы: Вы не инициализировали сессию. Похоже, что этот момент является критическим для работы используемой вами библиотеки. Как уже сказал @Visman, вы неправильно передаете массив в новый тред. Вообще, в PHP для передачи значения в анонимные функции, нужно использовать замыкания. Однако, в вашем случае этот подход не годится, ведь выполнение задачи будет проходить в другом процессе. По этой же причине, вариант с глобальными переменными тоже вряд ли сработает. К счастью, используемая вами библиотека предоставляет специальные средства для передачи аргументов функции. Пример есть в readme. Таким образом, ваш код должен иметь вид: session_start(); include 'lib/Threads.php'; $mas = array( 'id1', 'id2', 'id3', 'id4', ); function Eacher($m){ foreach ($m as $value) { echo $value; } } $Thread->Create(function($vars) { extract($vars); Eacher($mas); }, array( 'mas' => $mas, )); $Thread->Run();Ответ 2
Попробуйте так require_once 'lib/Threads.php'; $i=0; while ($i < 10) { $res = "lol$i"; $mas[] = $res; $i++; } $arr = array_chunk($mas, 2); function Id($m) { foreach ($m as $value){ echo $value; } } $Thread->Create(function($vars) { extract($vars); Id($arr); }, array( 'arr' => $arr, )); $Thread->Run();Ответ 3
Ещё можно так счастья попытать: $Thread->Create(function(){ global($arr); Id($arr); // возможно вот тут он ищет локальный массив $arr });
Комментариев нет:
Отправить комментарий