与“异步任务”相关的TAG标签
asyncio.run不能在已有事件循环中调用,因其设计为启动并关闭全新事件循环;否则抛RuntimeError。正确做法是:在已有loop中用await、create_task或run_until_complete。
库存扣减核心是保证数据一致性防超卖,关键在表设计(如UNSIGNEDstock、version乐观锁)与并发控制(UPDATE+WHERE校验或SELECTFORUPDATE),并可通过lock_stock预占机制提升秒杀场景准确性。
asyncio.run()不允许嵌套调用,会在已有运行事件循环时抛出RuntimeError;正确做法是用await、create_task或ensure_future在当前loop中调度协程。
唯一索引会拒绝重复值插入,普通索引仅加速查询且允许重复;两者均支持多NULL值,联合唯一索引中全NULL行视为可重复;唯一索引写入时需查重,影响高并发性能,但等值查询可触发优化器的const/eq_ref优化。
Callable能返回结果而Runnable不能,前者call()方法返回泛型V并支持受检异常,后者run()返回void;获取Callable结果必须通过Future.get()(推荐带超时),异常封装为ExecutionException。
lambda引用捕获会变悬空当其捕获的局部变量生命周期结束而lambda仍被调用,典型场景包括返回lambda、存入容器或注册为异步回调;关键在于被捕获变量的生命周期必须长于lambda。
线程数不应简单设为CPU核心数,需据任务类型动态计算;I/O密集型用公式“核心数(1+阻塞时间/运行时间)”,并合理配置ThreadPoolExecutor参数、隔离线程池、监控关键指标。
FastAPI的BackgroundTasks不捕获异常,会导致任务静默失败;必须手动为每个任务函数添加try/except并记录结构化日志;它不支持重试,关键任务应改用Celery等专业队列。
CompletableFuture比Future更好用,因为它支持非阻塞回调、函数式编排、多任务合并(allOf/anyOf)及灵活异常处理(handle/whenComplete),而Future仅支持阻塞等待或轮询。
不能直接支撑——std::future是单次结果容器,无任务分发与错误聚合能力;std::async需显式指定std::launch::async才能保证并发,须用vector缓存所有future并统一gather,避免循环内局部声明导致阻塞。
