1+ import asyncio
2+ import time
3+ from datetime import datetime , timedelta
4+
5+ """/*
6+ * EJERCICIO:
7+ * Utilizando tu lenguaje, crea un programa capaz de ejecutar de manera
8+ * asíncrona una función que tardará en finalizar un número concreto de
9+ * segundos parametrizables. También debes poder asignarle un nombre.
10+ * La función imprime su nombre, cuándo empieza, el tiempo que durará
11+ * su ejecución y cuando finaliza."""
12+
13+ async def task (name , seconds ):
14+ init_time = timedelta (seconds = datetime .now ().second )
15+ print (f"Start fetching data from { name } " )
16+ await asyncio .sleep (seconds )
17+ finish_time = timedelta (seconds = datetime .now ().second )
18+ difference = finish_time - init_time
19+ print (f"Data fetched from { name } in { difference } seconds" )
20+ return f"Data from { name } "
21+
22+
23+
24+ async def main ():
25+ result = await asyncio .create_task (task ("API_1" , 5 ))
26+ return result
27+
28+
29+ # if __name__ == "__main__":
30+ # asyncio.run(main())
31+
32+
33+ """ * DIFICULTAD EXTRA (opcional):
34+ * Utilizando el concepto de asincronía y la función anterior, crea
35+ * el siguiente programa que ejecuta en este orden:
36+ * - Una función C que dura 3 segundos.
37+ * - Una función B que dura 2 segundos.
38+ * - Una función A que dura 1 segundo.
39+ * - Una función D que dura 1 segundo.
40+ * - Las funciones C, B y A se ejecutan en paralelo.
41+ * - La función D comienza su ejecución cuando las 3 anteriores han finalizado.
42+ */"""
43+
44+ async def main2 ():
45+ start_time = time .time ()
46+ # Creamos las tareas explicitamente
47+ task_a = asyncio .create_task (task ("A" , 1 ))
48+ task_b = asyncio .create_task (task ("B" , 2 ))
49+ task_c = asyncio .create_task (task ("C" , 3 ))
50+
51+ # Esperamos que terminen las tareas paralelas (se ejecutan en paralelo)
52+ results = await asyncio .gather (task_a , task_b , task_c )
53+
54+ # Ejecutamos la función D
55+ result_d = await task ("D" , 1 )
56+
57+ results .append (result_d )
58+
59+ end_time = time .time () - start_time
60+
61+ print ("Results:" , results )
62+ print ("Total time:" , end_time , "seconds" )
63+
64+ if __name__ == "__main__" :
65+ asyncio .run (main2 ())
0 commit comments