J'écris un script Perl pour exécuter un type de pipeline. Je commence par lire un fichier JSON avec un tas de paramètres. Je fais ensuite un peu de travail - principalement en construisant des structures de données nécessaires plus tard et en appelant des programmes externes qui génèrent des fichiers de sortie auxquels je garde des références. J'utilise habituellement un sous-programme pour chacune de ces étapes. Chaque tel sous-programme écrira généralement des données à un endroit unique qu'aucun autre sous-programme n'écrit (c'est-à-dire une clé spécifique dans un hachage) et lit des données que d'autres sous-programmes peuvent avoir générées. Ces étapes peuvent prendre quelques bonnes minutes si elles sont faites de manière séquentielle, mais la plupart d'entre elles peuvent être exécutées en parallèle avec une simple logique de dépendances que je sais gérer (en utilisant des threads et une file d'attente). Je me demande donc comment je devrais implémenter ceci pour permettre le partage de données entre les threads. Que suggérez-vous le cadre à être? Peut-être utiliser un objet (dont je n'aurai qu'une seule instance) et conserver toutes les données partagées dans $self
? Peut-être un script simple (pas d'objets) avec des variables partagées "globales"? ...Conception d'un script perl avec multithreading et partage de données entre threads
Je préférerais évidemment une solution simple et soignée.
+1 merci Axeman. est-il nécessaire de verrouiller le référentiel entier quand seulement une partie de celui-ci (par exemple 'repository -> {key}' est changé? –
@David B, oui, malheureusement, il est.Référer à http://search.cpan.org/perldoc? threads :: shared # lock_VARIABLE – Axeman
"Les variables Perl ne sont pas partagées" Pas tout à fait vrai, cela dépend de quelle saveur http://perldoc.perl.org/Thread.html – Hawk