multitask / branches / master / README.markdown
history
Multitask Plugin
================
Version 0.0.1
by Adam Royle <adam@sleekgeek.com.au>
It uses PHP_Fork written by Luca Mariano <luca.mariano@email.it>
What is multitask?
------------------
Multitask is a CakePHP plugin designed as a proof of concept task manager for non-interactive tasks.
It consists of:
1. MultitaskerShell - a daemon that manages the tasks/threads
2. MultitaskQueuedTask - a model for adding queued tasks
3. ThreadedTask - a base class for your tasks
What does it do?
----------------
The multitasker shell acts as a daemon, getting a task from a model, executing it, and updating its status when done.
It could be used for executing long-running tasks in the background, such as tasks involving significant network activity, encoding video, etc.
Installation & Usage
--------------------
1. Copy the "multitask" folder into the plugins folder of your CakePHP app.
2. Import the database schema from config/multitask.sql
3. Run "multitasker" shell from the command line.
cd cake/console/
./cake multitasker -app ../../app
Then add some tasks into your database and it will execute them. :)
Here is some code that will add a task into the queue. Look in vendors/shells/tasks/echo.php for the task being executed.
$this->MultitaskQueuedTask = ClassRegistry::init('Multitask.MultitaskQueuedTask');
$task = array(
'task' => 'echo',
'data' => 'Hello, World!',
);
$this->MultitaskQueuedTask->create($task, true);
$this->MultitaskQueuedTask->save();
$task = array(
'task' => 'echo',
'method' => 'delayed',
'data' => array('duration' => 3, 'message' => 'That was a nice sleep!'),
);
$this->MultitaskQueuedTask->create($task, true);
$this->MultitaskQueuedTask->save();
Known Issues
------------
I've not used this in production and don't recommend you do either! Heck, I haven't used it aside from a few small tests, so use with caution.
The plugin is in its elementary stages, and doesn't handle scripting errors, task progress, task dependencies, task priorities, etc.
Requirements
------------
PHP needs to be configured with pcntl and shmop extensions, as it uses PHP_Fork to handle threading.
I have only tested it on PHP5. Please let me know if you get it working on PHP4.
Windows Compatibility
---------------------
Although the pcntl and shmop extensions don't run on Windows, I have added "linear threading" (ie. no threading) so you can test the functionality of your tasks on Windows.
