El siguiente script tiene el propósito de ejecutar muchas funciones simultáneamente, pero no tengo idea de por qué no está funcionando correctamente.
Las funciones se ejecutan de forma secuencial, no paralela.Problema al utilizar greenlet para ejecutar múltiples funciones simultáneamente
Agradecería cualquier sugerencia para aclararme, sobre lo que estoy haciendo mal.
import time
import eventlet
EXECUTION_TIMEOUT = 10
def example(name, steps_limit):
print 'Starting process %s with %d steps' % (name, steps_limit)
for i in range(1, steps_limit+1):
print "Process %s, step %d" % (name, i)
time.sleep(2)
print 'Finishing process %s with %d steps' % (name, steps_limit)
def fetch(input_data):
example(input_data['name'], input_data['steps'])
test_data = [{'name':'proceso1', 'steps':3},
{'name':'proceso2', 'steps':5},
{'name':'proceso3', 'steps':6},
]
def main():
#Setting up time out
timeout = eventlet.timeout.Timeout(EXECUTION_TIMEOUT)
#initialize pool
pool = eventlet.GreenPool(size=1000)
try:
for hits in pool.imap(fetch, test_data):
pass
except eventlet.Timeout:
print 'Operation interrupted by timeout concept'
finally:
timeout.cancel()
if __name__ == '__main__':
main()
Por favor incluya cualquier mensaje de error que esté recibiendo, y sea más específico en cuanto a lo que está sucediendo. ¿regresa inmediatamente? ¿Se cuelga para siempre? ¿Qué has intentado arreglar? – TorelTwiddler
No hay mensajes de error, no cuelga para siempre. El problema es que el proceso ocurre de forma sequantial, no desordenada. Cada función comienza cuando termina el anterior. No deseo eso. – rmaceissoft
Ya veo cuál es mi error. Estoy usando "time.sleep" en lugar de "eventlet.sleep". La diferencia es que el último no bloquea a todo el intérprete y, por lo tanto, permite que los otros compartimentos realicen también sus solicitudes. Gracias a mí mismo por este tiempo; -) .... y espero que esta pregunta ficticia ayude a los demás ... – rmaceissoft