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