banner(“4. CACHE KV EN MEMORIA (cup.cache)”) intente: desde la caché de importación de copa kv = cache.KVCache(name=”demo”) kv.set({“user:1”: “alice”, “user:2”: “bob”}, expire_sec=2) kv.set({“config:flag”: “on”}, expire_sec=None) print(“tamaño después de conjuntos :”, kv.size()) print(“get usuario:1:”, kv.get(“usuario:1”)) print(“falta la clave:”, kv.get(“no”)) print(“dormir 2.2s para dejar que las claves 2s-TTL caduquen …”) time.sleep(2.2) print(“obtener usuario:1 (expirado):”, kv.get(“usuario:1”)) print(“get config:flag (eterno):”, kv.get(“config:flag”)) reclaimed = kv.pop_n_expired(0) print(“pop_n_expired reclaimed :”, list(reclaimed.keys()) si se reclama más []) excepto excepción como e: skip(e) banner(“5. GENERACIÓN DE ID ÚNICA (cup.services.generator)”) intente: desde cup.services import generador gman = generador.CGeneratorMan() print(“uniqname :”, gman.get_uniqname()) print(“next_uniq_num :”, gman.get_next_uniq_num()) print(“next_uniq_num (nuevamente) :”, gman.get_next_uniq_num(), “(monotonic)”) if hasattr(gman, “get_uuid”): prueba: print(“get_uuid :”, gman.get_uuid()) excepto Excepción como e: skip(e) if hasattr(gman, “get_random_str”): prueba: print(“get_random_str(16) :”, gman.get_random_str(16)) excepto Excepción como e: skip(e) print(“singleton check :”, generador.CGeneratorMan() es gman) intente: cyc = generador.CycleIDGenerator(“127.0.0.1”, 8080) i1, i2 = cyc.next_id(), cyc.next_id() print(“CycleIDGenerator id #1:”, i1) print(“CycleIDGenerator id #2 :”, i2, “(incrementado)”) print(“id #1 como hexadecimal:”, generador.CycleIDGenerator.id2_hexstring(i1)) excepto excepción como e: skip(e) excepto excepción como e: skip(e) banner(“6. THREAD POOL (cup.services.threadpool)”) intente: desde cup.services import threadpool pool = threadpool.ThreadPool(minthreads=2, maxthreads=4, nombre=”demo-pool”) resultados de pool.start(), rlock = []threading.Lock() def square(n): time.sleep(0.03) con rlock: results.append(n * n) devuelve n * n para i en range(8): pool.add_1job(square, i) callback_log = []
def on_done(ok, resultado): callback_log.append((ok, resultado)) pool.add_1job_with_callback(on_done, square, 100) def will_fail(): rise RuntimeError(“boom inside trabajador”) pool.add_1job_with_callback(on_done, will_fail) time.sleep(0.5) print(“live stats :”, pool.get_stats()) pool.stop() print(“cuadrados recolectados:”, ordenados(resultados)) print(“resultados de devolución de llamada:”, callback_log) excepto excepción como e: skip(e)
def on_done(ok, resultado): callback_log.append((ok, resultado)) pool.add_1job_with_callback(on_done, square, 100) def will_fail(): rise RuntimeError(“boom inside trabajador”) pool.add_1job_with_callback(on_done, will_fail) time.sleep(0.5) print(“live stats :”, pool.get_stats()) pool.stop() print(“cuadrados recolectados:”, ordenados(resultados)) print(“resultados de devolución de llamada:”, callback_log) excepto excepción como e: skip(e)