Multithread launcher / procesare paralela / parallel

Ce este

Este un sistem prin care putem sa lansam in mod asincron un controller/action si sa-i urmarim progresul de executie. Locul de unde lansam procesul (adica acel controller/action) il numim proces master iar procesul lansat il numim proces child.

Cum facem

In master, in controller, lansam child-ul asa:

  public function actionUnpack($id) {
    (...)
    $processId = UThreader::Launch('uploaded-document/unpack-executor?id=' . $id);
    (...)
    return $this->render('unpack', [
      'model'     => $model,
      'processId' => $processId,
    ]);
  }

In master, in template, putem sa afisam progresul asa:

<?= \Yii::$app->controller->renderPartial("/layouts/uthreader-loader", ['processId' => $processId]) ?>

Daca avem mai multe pe o pagina, adaugam idPrefix la renderPartial() – si fiecare dintre ele va veni cu propriul processId.

In child, trebuie doar sa updatam progresul la momentele cheie, asa:

UThreader::Update(UThreader::getProcessIdFromHeaders(),"optional, text pentru log...",10); // 10= progresul in procente

Important: in child foloseste try-catch si in catch seteaza progresul la 100 pentru ca altfel procesul master nu va arata niciodata ca child s-a terminat, in caz de eroare.

About

Software Development Manager, Architect

Leave a Reply

Your email address will not be published. Required fields are marked *

[TOP]