3

How to convert code from core PHP to Pthread code

My core PHP code :

require_once 'xyz.php';
$count="0";

foreach($sites as $site)
{
require_once 'allsite/'.$site.'.php';
$siteObj = new $site;
$data[$count] = $siteObj->getsiteData($query,$cat);
$count++;
}

How can i execute foreach loop code in Pthread manner ( Multi-threading )

After foreach loop execution complete normal PHP stuff done (Means No Multi-Threading after foreach Loop)

Note : I already installed and config pthread in PHP

1 Answer 1

5

Comments included.

<?php

//Require Core Component
require_once("xyz.php");

$Threads = new StackableArray();

//A Global Storage that will be shared between threads.
$Storage = new Storage();

//Store {count} in Global Storage
$Storage['count'] = 0;


/*
 * For Each Site, spawn a new thread, process the site and store result in Global Storage.
 */
foreach($sites as $site)
{
    $Thread = new SiteProcess($Storage, $site);
    $Thread->start();
    $Threads[$re] = $Thread;
}

//When the threads are complete, join them(destroy the threads)
foreach($Threads as $Thread)
{
    $Thread->join();
}

//A thread class
class SiteProcess extends Threads
{
    private $Storage;
    private $site;

    public function __construct(Storage $Storage, $site)
    {
        $this->Storage = $Storage;
        $this->site = $site;
    }

    public function run()
    {
        require_once("allsite/{$this->site}.php");
        $siteObj = new $this->site;
        $this->Storage[$this->Storage['count']] = $siteObj->getsiteData($query, $cat);
        $this->Storage['count'] = $this->Storage['count'] + 1;
    }
}

class StackableArray extends Stackable { public function run() { } };

class Storage extends Stackable { public function run() { } };
Sign up to request clarification or add additional context in comments.

9 Comments

@Michael thnx ...... can you tell me what is use of last two stackableArray and Storage class??................and after multithreading how can i use all $this->Storage[$this->Storage['count']] array value in normal PHP
@Melody Those classes are needed to share data between threads. It is not possible to share normal arrays between threads.
@Melody after the threads are completed the main process can cast the object back to a normal array and manipulate that ... or you can use the builtin ArrayAccess on the object ...
What is the variable $re?
@Pierre I think I may have used a for() loop before, I think it's meant to just be a [] for array append.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.