Pregunta

Quiero usar Python de multiprocesamiento para realizar el procesamiento concurrente sin utilizar cerraduras (cerraduras para mí son lo contrario de multiprocesamiento) porque quiero construir varios informes de diferentes recursos en exactamente el mismo tiempo durante una petición web (normalmente toma alrededor 3 segundos, pero con multiprocesamiento puedo hacerlo en .5 segundos).

Mi problema es que, si expongo una característica a la web y reciben 10 usuarios tirando del mismo informe, al mismo tiempo, de repente tengo 60 intérpretes abren al mismo tiempo (, que se estrellaría el sistema ). ¿Es sólo el resultado del sentido común de la utilización de multiprocesamiento, o hay un truco para conseguir alrededor de este potencial pesadilla?

Gracias

¿Fue útil?

Solución

Si usted está realmente preocupado por tener demasiados casos se podría pensar en proteger la llamada con un objeto semáforo. Si entiendo lo que está haciendo, puede utilizar la rosca objeto de semáforo:

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

Estoy asumiendo que la limpieza make_multiprocessing_call() voluntad de sí mismo.

De esta manera nunca se pueden abrir sólo 10 casos "extra" de pitón, si otra solicitud viene lo largo de ella sólo tendrá que esperar hasta haber completado el anterior. Por desgracia, este no será el fin "cola" ... o cualquier orden en particular.

Espero que ayude

Otros consejos

Usted está ladrando al árbol equivocado si está intentando utilizar multiprocess añadir concurrencia a una aplicación de red. Usted está ladrando a completamente árbol equivocado si va a crear procesos para cada solicitud. multiprocess no es lo que quiere (al menos como un modelo de concurrencia).

Hay una posibilidad buena que desea un marco de redes asíncronas como Twisted .

cerraduras son sólo alguna vez nessecary si tiene varios agentes escrito a una fuente. Si sólo están accediendo, no se necesitan cerraduras (y como bien dice la derrota el propósito de multiprocesamiento).

¿Está seguro de que se estrellaría el sistema? En un servidor web a través de CGI, cada solicitud genera un nuevo proceso, por lo que no es raro ver a miles de procesos simultáneos (concedida en un pitón debe utilizar wsgi y evitar este), que no se bloquee el sistema .

Le sugiero que pruebe su teoría - que no debería ser difícil de fabricar 10 accesos simultáneos -. Y ver si su servidor realmente accidente

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top