Skip to content

Commit 1fd4ef5

Browse files
authored
Merge pull request mouredev#7695 from JheisonQuiroga/main
#15 - Python
2 parents f95f328 + eb9d84f commit 1fd4ef5

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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

Comments
 (0)