J'ai une liste (appelée requestRoster) contenant des dictionnaires (demandes appelées). Les éléments du dictionnaire 'requests' sont des choses comme 'requestTime' et 'thisURL'. .: par exemple Comment puis-je créer une structure de données interprocess en Python?
[
{'thisURL': 'http://localhost/bikes', 'requestTime': datetime.datetime(2012, 10, 18, 0, 41, 34)},
{'thisURL': 'http://localhost/clothing', 'requestTime': datetime.datetime(2012, 10, 18, 0, 41, 35)}
]
J'utilise multiprocessing.Process pour frayer un nouveau processus pour émettre chaque demande.
J'aimerais que chaque processus mette à jour le requestRoster en ajoutant un élément 'response' à chaque requête.
Comment est-ce que je peux faire ceci?
J'ai essayé d'utiliser un multiprocessing.Manager() pour créer un manager.list() et un manager.Namespace(). Ni me laisse faire ce que je veux faire, je pense à cause de cela: http://docs.python.org/library/multiprocessing.html#multiprocessing.managers.SyncManager.list
Je pense que je pourrais utiliser un multiprocessing.Lock() pour
- acquérir un mutex
- faire une copie le requestRoster à l'intérieur du processus
- modifier la requestRoster localisée
- remplacer le fichier de demande « globablised » avec le localisé une
- libération du mutex
... mais cela semble un peu compliqué et je me demande s'il me manque quelque chose de plus simple. Un rappel asynchrone serait génial.
Est-ce que vos employés ont besoin de lire à partir de la liste ou simplement d'y répondre? De votre description, il semble qu'une simple file d'attente ou même un tuyau connecté entre le répartiteur et chaque travailleur devrait travailler pour repousser vos données de réponse, puis le répartiteur peut être chargé de consigner la réponse à la bonne entrée dans votre historique des appels . –
Ok, une file d'attente. Donc le répartiteur dépêche; le travailleur travaille; le travailleur ajoute un résultat à une file d'attente; le répartiteur considère la file d'attente et supprime les réponses. Quelque chose comme ca? J'aime ça ... la seule chose dont je me méfie, c'est de rendre le répartiteur responsable de quoi que ce soit d'autre que l'envoi, car il est déjà débordé de travail lorsque des centaines de demandes doivent être envoyées simultanément. Je pense qu'il y a de vrais arguments en faveur du processus de travail pour avoir accès à une structure de données «globale» ... et pour que les travailleurs fassent tout le travail, y compris la mise à jour. – dave
Cela se développe sur moi. Je pourrais demander au répartiteur de ne le faire que lorsqu'il aura le temps de le faire, mais concentrez-vous sur l'envoi la plupart du temps. Merci pour votre contribution. – dave