Pregunta

pitón sin pérdida de velocidad no tuvo un buen uso de múltiples núcleos, por lo que ¿dónde está el punto que debería ser más rápido que el pitón hilo / multiproceso?

toda la referencia tasklet uso sin apilado Python para comparar con bloqueo de rosca pitón y la cola, eso es injusto, bloqueo causa siempre tiene baja eficiencia

ver, si llamada a la función de un solo uso de hilo sin bloqueo debe ser tan eficiente como pitón sin pérdida de velocidad

¿Fue útil?

Solución

Enfoque en la funcionalidad de primera y segunda actuación (a menos que usted sabe que tiene la necesidad).

La mayoría de las veces en un servidor va gastando de E / S, de modo multi-núcleos no ayudan tanto. Si es sobre todo E / S que se está trabajando con, pitón multi-threading puede ser la respuesta más simple.

Si el servidor solicita son la CPU, y luego tener un proceso padre (ya sea multi-hilo o no), y los respectivos procesos hijo no hacen una buena dosis de sentido.

Si realmente quiere escalar, usted podría mirar a una plataforma diferente, como Erlang. Si realmente quiere escalar y seguir utilizando pitón, usted podría mirar a Erlang distribuido con los procesos de Python administrados como puertos de Erlang en un clúster distribuido.

Un montón de opciones, pero a menos que usted está tratando con calle detrás grande, grande , que podría muy probablemente tomar un enfoque simple.

release early.

Otros consejos

Hay esta cosa nueva y de moda llamada asincrónica-IO-bucles y de paso de mensajes, concurrencia y algunos otros términos de moda. Bueno, no es en absoluto nueva, pero es sólo apenas estas siendo descubiertos por la corriente principal. Últimos 5 años

Stackless Python es una versión de Python, donde la máquina virtual en sí ha sido modificado para soportar mejor estas de paso de mensajes y bucles IO, y su truco es verde roscado / corrutinas.

Hay otras bibliotecas para hacer lo mismo con diferentes herramientas, por ejemplo, Retorcido y Tornado, en Python. Usted puede incluso funcionar híbrido de encuadernación en Stackless Python y así sucesivamente.

El bit de bucle IO asigna directamente a cómo hacer tomas Berkley S asíncrona, y con un poco de esfuerzo se puede extender a ser proactivo en lugar de reactivo y trabajar con los sistemas de archivos, así como conectores de red, por ejemplo, la más reciente libevent.

Para escalar hacia los lados para utilizar más de un núcleo es donde usted tiene dos enfoques - multihilo ; estado compartido, por ejemplo, hilos o entre los procesos - multiprocesamiento por ejemplo colas de mensajes. Es una limitación general de las arquitecturas actuales que el enfoque de las discusiones funciona bien para un gran número de núcleos a nivel local, mientras que el paso de mensajes supera en cuanto al rendimiento ya que el número de núcleos vuelve masivo o si los núcleos están en máquinas diferentes. Y se puede hacer una aproximación híbrida.

Debido a las opciones de diseño internos de la máquina virtual de Python, por lo general no es tan eficiente en multi-threading como multi-procesamiento, por lo que ir a varios procesos con el paso de mensajes antes de lo que en otras plataformas.

Pero en general, el mensaje de enfoque que pasa es un limpiador, corregir fácilmente versión.

Y hay otras lenguas que se basan en este mismo enfoque con diferentes objetivos adicionales y restricciones por ejemplo, Erlang, Node.js, Clojure, Ir.

De éstos, Clojure es quizás el más informativo. Cuando usted entienda cómo las garrapatas Clojure, y pensar a través de los porqués , el conjunto de objetivos y limitaciones de los otros sistemas caerá en su lugar ...

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