PHP code example of ackintosh / snidel
1. Go to this page and download the library: Download ackintosh/snidel library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ackintosh / snidel example snippets
initialize_data__job1.php &');
exec('php slow_job2.php &');
use Ackintosh\Snidel;
$f = function ($s) {
sleep(3);
echo 'echo: ' . $s;
return 'return: ' . $s;
};
$s = time();
$snidel = new Snidel();
$snidel->process($f, ['foo']);
$snidel->process($f, ['bar']);
$snidel->process($f, ['baz']);
// `Snidel::results()` returns `\Generator`
foreach ($snidel->results() as $r) {
// string(9) "echo: foo"
var_dump($r->getOutput());
// string(11) "return: foo"
var_dump($r->getReturn());
}
// If you don't need the results, let's use `Snidel::wait()` instead of `Snidel::results()`
// $snidel->wait();
echo (time() - $s) . 'sec elapsed' . PHP_EOL;
// 3sec elapsed.
new Snidel([
'concurrency' => 3,
// Please refer to `Logging`
'logger' => $monolog,
// Please refer to `Using custom queue`
'driver' => $driver,
// a polling duration(in seconds) of queueing
'pollingDuration' => 1,
]);
// multiple arguments
$snidel->process($f, ['arg1', 'arg2']);
// global function
$snidel->process('myfunction');
// instance method
$snidel->process([$instance, 'method']);
$f = function ($arg) {
return $arg;
};
$snidel->process($f, 'arg-A_tag1', 'tag1');
$snidel->process($f, 'arg-B_tag1', 'tag1');
$snidel->process($f, 'arg_tag2', 'tag2');
foreach ($snidel->results as $r) {
// `Task::getTag()` returns the tag passed as 3rd parameter of `Snidel::process()`
switch ($r->getTask()->getTag()) {
case 'tag1':
$r->getReturn(); // arg-A_tag1 | arg-B_tag1
break;
case 'tag2':
$r->getReturn(); // arg_tag2
break;
default:
$r->getReturn();
break;
}
}
// e.g. MonoLog
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
$monolog = new Logger('sample');
$stream = new StreamHandler('php://stdout', Logger::DEBUG);
$stream->setFormatter(new LineFormatter("%datetime% > %level_name% > %message% %context%\n"));
$monolog->pushHandler($stream);
$snidel = new Snidel(['logger' => $monolog]);
$snidel->process($f);
// 2017-03-22 13:13:43 > DEBUG > forked worker. pid: 60018 {"role":"master","pid":60017}
// 2017-03-22 13:13:43 > DEBUG > forked worker. pid: 60019 {"role":"master","pid":60017}
// 2017-03-22 13:13:43 > DEBUG > has forked. pid: 60018 {"role":"worker","pid":60018}
// 2017-03-22 13:13:43 > DEBUG > has forked. pid: 60019 {"role":"worker","pid":60019}
// 2017-03-22 13:13:44 > DEBUG > ----> started the function. {"role":"worker","pid":60018}
// 2017-03-22 13:13:44 > DEBUG > ----> started the function. {"role":"worker","pid":60019}
// ...
$snidel->process(function ($arg1, $arg2) {
exit(1);
}, ['foo', 'bar']);
$snidel->get();
var_dump($snidel->getError());
// class Ackintosh\Snidel\Error#4244 (1) {
// ...
// }
foreach ($snidel->getError() as $pid => $e) {
var_dump($pid, $e);
}
// int(51813)
// array(5) {
// 'status' => int(256)
// 'message' => string(50) "an error has occurred in child process.
// 'callable' => string(9) "*Closure*"
// 'args' =>
// array(2) {
// [0] => string(3) "foo"
// [1] => string(3) "bar"
// }
// 'return' => NULL
// }
// }
$connection = Aws\Sqs\SqsClient::factory([
'key' => 'your-aws-access-key',
'secret' => 'your-aws-secret-key',
'region' => 'the-aws-region-you-choose'
]);
$driver = new Bernard\Driver\SqsDriver($connection);
new Snidel([
'driver' => $driver,
]);