import asyncio
from multiprocessing import Process
from datetime import datetime
import time
import os

def log(msg):
    print(f"[{datetime.now().strftime('%H:%M:%S')}] {msg}")

def tarea_pesada_cpu():
    pid = os.getpid()
    log(f"🔧 Proceso pesado INICIADO (PID: {pid})")
    suma = sum(i * i for i in range(10**8))  # Simula carga pesada
    log(f"🔧 Proceso pesado TERMINADO. Resultado: {suma} (PID: {pid})")

async def tarea_ligera_async(nombre, segundos):
    log(f"⚡ {nombre} INICIADA")
    await asyncio.sleep(segundos)
    log(f"⚡ {nombre} TERMINADA")

async def main():
    log("🎬 Iniciando tareas")

    # Crear y lanzar un proceso en paralelo (cálculo pesado)
    proceso = Process(target=tarea_pesada_cpu)
    proceso.start()

    log(f"🕵️ Proceso pesado lanzado con PID {proceso.pid}. Búscalo en el Administrador de tareas (pestaña Detalles).")

    # Mientras tanto, corremos tareas asincrónicas
    await asyncio.gather(
        tarea_ligera_async("Tarea 1", 1),
        tarea_ligera_async("Tarea 2", 2)
    )

    # Esperar a que el proceso termine
    proceso.join()

    log("🏁 Todas las tareas finalizadas")

if __name__ == "__main__":
    asyncio.run(main())
