Question

Je veux utiliser multitraitement pour faire le traitement simultané de Python sans utiliser des serrures (serrures me sont à l'opposé de multitraitement) parce que je veux construire plusieurs rapports de différentes ressources au même moment lors d'une demande Web (prend normalement environ 3 secondes, mais avec multitraitement je peux le faire en .5 secondes).

Mon problème est que, si j'expose une telle fonctionnalité sur le Web et obtenez 10 utilisateurs en tirant le même rapport en même temps, j'ai tout à coup 60 interprètes ouvrent en même temps ( qui échouerait le système ). Est-ce que le résultat de bon sens de l'utilisation multitraitement, ou est-il une astuce pour contourner ce cauchemar potentiel?

Merci

Était-ce utile?

La solution

Si vous êtes vraiment inquiet d'avoir trop de cas, vous pouvez penser à protéger l'appel avec un objet Sémaphore. Si je comprends ce que vous faites, vous pouvez utiliser l'objet sémaphores fileté:

from threading import Semaphore
sem = Semaphore(10)
with sem:
    make_multiprocessing_call()

Je suppose que le nettoyage de la volonté de make_multiprocessing_call() après lui-même.

De cette façon, seulement 10 cas « supplémentaires » de python sera jamais ouvert, si une autre demande vient le long il suffit d'attendre que la précédente ont terminé. Malheureusement, ce ne sera pas pour « file d'attente » ... ou tout ordre en particulier.

L'espoir qui aide

Autres conseils

Vous aboient le mauvais arbre si vous essayez d'utiliser multiprocess pour ajouter une application à concurrence de réseau. Vous aboiements complètement mauvais arbre si vous créez des processus pour chaque demande. multiprocess n'est pas ce que vous voulez (au moins comme un modèle d'accès concurrentiel).

Il y a une bonne chance que vous voulez un cadre de mise en réseau asynchrone comme Twisted .

verrous ne sont jamais nessecary si vous avez plusieurs agents écrivant à une source. Si elles ne sont que l'accès, les serrures ne sont pas nécessaires (et comme vous avez dit la défaite dans le but de multitraitement).

Êtes-vous sûr que le système plantait? Sur un serveur Web en utilisant CGI, chaque fraye demande un nouveau processus, il est donc pas rare de voir milliers de processus simultanés (accordée dans un python devrait utiliser wsgi et éviter cela), qui ne tombe pas en panne le système .

Je vous suggère de tester votre théorie - il ne devrait pas être difficile de fabriquer 10 accès simultanés -. Et voir si votre serveur fait vraiment plantage

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top