Tengo un programa de combinación de merchandising multiproceso en C, y un programa para pruebas comparativas con 0, 1, 2 o 4 hilos. También escribí un programa en Python para hacer múltiples pruebas y agregar los resultados.El programa C es más rápido que el subproceso de Python
Lo extraño es que cuando ejecuto Python, las pruebas siempre se ejecutan en aproximadamente la mitad del tiempo en comparación con cuando las ejecuto directamente en el shell.
Por ejemplo, cuando ejecuto el programa de pruebas por sí mismo con 4 millones de números enteros para ordenar (los dos últimos argumentos son la semilla y el módulo de números enteros que generan):
$ ./mergetest 4000000 4194819 140810581084
0 threads: 1.483485s wall; 1.476092s user; 0.004001s sys
1 threads: 1.489206s wall; 1.488093s user; 0.000000s sys
2 threads: 0.854119s wall; 1.608100s user; 0.008000s sys
4 threads: 0.673286s wall; 2.224139s user; 0.024002s sys
Utilizando el script en Python:
$ ./mergedata.py 1 4000000
Average runtime for 1 runs with 4000000 items each:
0 threads: 0.677512s wall; 0.664041s user; 0.016001s sys
1 threads: 0.709118s wall; 0.704044s user; 0.004001s sys
2 threads: 0.414058s wall; 0.752047s user; 0.028001s sys
4 threads: 0.373708s wall; 1.24008s user; 0.024002s sys
Esto sucede sin importar cuántos estoy ordenando, o cuántas veces lo ejecuto. El programa python llama al probador con el módulo de subproceso, luego analiza y agrega la salida. ¿Alguna idea de por qué esto sucedería? ¿Python de alguna manera está optimizando la ejecución? o hay algo que lo ralentiza cuando lo ejecuto directamente que no conozco?
Código: https://gist.github.com/2650009
¿Puede mostrarnos el código de Python? – NPE
... y el código C también. O al menos proporcionar un puntero al código en github o similar. –
¿Se debe a que la ejecución desde el shell hace que el programa pase una cantidad desproporcionada de tiempo imprimiendo en la consola? Intenta redirigir 'stdout' a'/dev/null' y ver si eso cambia la situación. –