New CakePHP “multitask” Plugin

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 or 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.
Where can I get it?
UPDATE: I've now pushed it to github - http://github.com/ifunk/Multitask for easy downloading...