PHP Classes

Simple PHP Multithreading: Create threads that run multiple tasks in parallel

Recommend this page to a friend!
  Info   View files Documentation   View files View files (6)   DownloadInstall with Composer Download .zip   Reputation   Support forum (1)   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2020-05-13 (18 days ago) RSS 2.0 feedNot yet rated by the usersTotal: 115 This week: 9All time: 9,188 This week: 29Up
Version License PHP version Categories
simple-multi-threade 1.0.1MIT/X Consortium ...5.4PHP 5, Language
Description Author

This package can create threads that run multiple tasks in parallel.

It can start multiple thread processes that can execute given PHP code using the command line interface version of PHP.

The processes can work well either on Linux and Windows. The processes take parameters to execute the given code passed as a PHP closure function.

  Performance   Level  
Name: Mahesh S <contact>
Classes: 3 packages by
Country: India India
Age: 30
All time rank: 3984276 in India India
Week rank: 27 Up5 in India India Up
Innovation award
Innovation award
Nominee: 2x

Details

Simple Multi Threader

A simple PHP Multithreader extension which is ready for use without any setups or configurations.

  • No need to integrate any Queues or similar implementations
  • Write the code you want to process in the background in a closure(anonymous function) along with arguments(if any) and provide it to the extension. That's all.
  • Works with Core PHP(Normal PHP), Laravel and Yii2 out of the box.
  • Can work with any PHP Framework/Platform by just adding the required bootstrap code(See here).
  • Compatible with PHP installations in Windows and \*nix(Unix like)

Installation

The preferred way to install this extension is through composer.

Either run

composer require codespede/simple-multi-threader

or add

"codespede/simple-multi-threader": "*"

to the require section of your composer.json.

How to use

If you want to run some code in the background, just provide it in a closure(anonymous function) to an object of the class Threader as below:

$threader = new cs\simplemultithreader\Threader(['arguments' => ['myObject' => new \stdClass, 'myArray' => ['a', 'b', 'c']]]);
$jobId = $threader->thread(function($arguments){
	//your code here..
 	//you can access any of the above given $arguments here like $arguments['myObject'] or $arguments['myArray']
});

That's all, the Threader will create the required job files in the specified $jobsDir and will start a PHP process in the background executing your code. The main thread(code above and after $threader->thread...) will run without waiting for the sub-thread(code in the closure) to finish. You will also get the started job's id(an md5 string) as the return value of the method thread which you can use for debugging.

Any data returned from the closure function will be logged to a file with name smt_<jobId>.log in the default directory specified for logs: smt-logs.

Configurable Options

$arguments - Arguments for the closure - type: mixed, default = null

$jobsDir - Directory(auto-created if not existing) where temporary job files will be stored - type: string, default = "smt-jobs"

$logsDir - Directory(auto-created if not existing) where log files will be stored - type: string, default = "smt-logs"

$nohup - Whether to ignore the HUP (hangup) signal in Unix based systems - type: boolean, default = true

$helperClass - Fully qualified class name of the Helper to be used. - type: string, default = "cs\\simplemultithreader\\CommandHelper"

Any option above can be used to configure the Threader in the below way:

$threader = new cs\simplemultithreader\Threader(['jobsDir' => 'MyJobsDir', 'helperClass' => '\namespace\of\MyHelperClass']);

or like:

$threader = new cs\simplemultithreader\Threader;
$threader->arguments = ['myObject' => new \stdClass, 'myArray' => ['a', 'b', 'c']];
$threader->jobsDir = 'MyJobsDir';
...

Making it compatible with the platform you use

Even if your application is not built either on Core PHP, Laravel or Yii2 which are already supported, you can make it compatible with this extension by the below steps:

There are two ways to accomplish this: 1. Easiest way - Insert the bootstrap code of your Platform before your code in the closure.

   $jobId = $threader->thread(function($arguments){
      //bootstrap code here..
      //your actual code here..
   });
  1. Recommended way - Extend $helperClass with your own Helper class and include the corresponding bootstrap function in it as below:

    Suppose the platform you use is WordPress. Create a function in the extended Class as below: ` public function executeWordpressBootStrap(){ //code required to bootstrap Wordpress.. } ` and override the getPlatform method to just return the string 'wordpress'(as WordPress is the only platform you use in that app) as below: ` public function getPlatform(){ return 'wordpress'; } ` That's all! executeWordpressBootStrap will be executed before executing your code allowing Wordpress's native functions and usages in your code inside the Closure.

    By doing this just once, the extension is now ready for executing any code(normal and platform related) anywhere in your Platform. You're also getting the freedom to override any additional logic defined in the CommandHelper class.

    Pull Requests for supporting additional platforms are always welcome!

Debugging

Whenever an exception gets thrown from your code provided in the closure, it will be logged with a filename: smt_<jobId>_error.log. You can find the details of the error including the Stack Trace inside it.

  Files folder image Files  
File Role Description
Files folder imagesrc (3 files)
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file LICENSE Lic. License text
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files  /  src  
File Role Description
  Plain text file CommandHelper.php Class Class source
  Accessible without login Plain text file thread.php Aux. Auxiliary script
  Plain text file Threader.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:115
This week:9
All time:9,188
This week:29Up

For more information send a message to info at phpclasses dot org.