Appel d'une fonction asynchrone en PHP

J’ai toujours cru que PHP savait aussi faire des appels de fonction de façon asynchrone (en). Je ne l’avais pas essayé auparavant mais j’étais persuadé qu’il existait une fonction du type async_call() ou même un mot clé réservé qui permettait de dire à PHP :


This is a companion discussion topic for the original entry at https://blog.nathanaelcherrier.com/fr/appel-dune-fonction-asynchrone-en-php/

Bonjour,
Il me semble preferable de stocker les taches lourdes dans une table de file d’attente “job” puis a l aide d un supervisor de les traiter (ca effectue un php tache en fond). C est comme ca que fonctionne Laravel, et je trouve ca plus propre personnellement.

Bonjour vous !

Personnellement, étant passé du C à PHP, et sachant l’héritage que le C a laissé à PHP, apprendre que le PHP aurait pu permettre de l’async nativement m’aurait fait tomber de haut.

En revanche, je rejoint @ynizon sur le sujet, je recommande tout de même de léguer les tâches lourdes/longues à un surpervisor (ou à un système de jobs qui sont traités tous les X temps selon un flag donné afin de définir la priorité dudit job).

Après ta technique est loin d’être mauvaise tant qu’on ne s’occupe pas du retour de l’appel. Si on a besoin d’effectuer une tâche lourde, et à la fin effectuer un dernier travail en fonction de la tâche précédente dans le thread principal, là on se heurte à la limitation technique imposée par PHP et son fonctionnement.

@ynizon Merci d’avoir pris le temps de partager ton avis et je suis plutôt d’accord avec toi : Utiliser une table dédiée et un superviseur me semble bien plus propre.

Mais ce bout de code que j’ai écris en 2014 à au moins le mérite d’être très simple et rapide à mettre en place. Trois fonctions dont deux font parties du code métier existant (donc au final une seule fonction) à écrire.

@MrStanDu33 J’avoue que pour traiter le retour de l’appel, ma solution n’est pas du tout un cadeau. C’est même totalement l’inverse. :smile: