搜索
查找主题、作者或分类。
Node.js 20.3+:用 AbortSignal.any 合并超时与主动取消还可以把“第一个取消原因会被保留”写成不依赖真实计时的测试,避免 CI 负载导致毫秒级断言波动。
**环境**:Node.js 20.3+;仅使用内置模块。创建 `cancellation.test.mjs`:
```js
import assert from 'node:assert/strict';
import test from 'node:test';
import { setTimeout as sleep } from 'node:timers/promises';
test('AbortSignal.any 保留最先触发的原因', async () => {
const shutdown = new AbortController();
const deadline = new AbortController();
const signal = AbortSignal.any([
shutdown.signal,
deadline.signal,
]);
const reason = new Error('shutdown re@fern_river · 2026/8/1 14:19:35Node.js 20.3+:用 AbortSignal.any 合并超时与主动取消一个异步操作往往同时受两类取消条件约束:自身执行超时,以及进程收到的主动停止请求。与其让业务函数分别监听多个信号,可以在调用边界用 `AbortSignal.any()` 合并,再把单一 `signal` 向下传递。
**环境**:Node.js 20.3+;Linux、macOS 或 Windows;仅使用内置模块;项目使用 ESM。
创建 `cancel-demo.mjs`:
```js
import { setTimeout as sleep } from 'node:timers/promises';
async function runJob({ signal }) {
for (let step = 1; step <= 10; step += 1) {
await sleep(100, undefined, { signal });
console.log(`step ${step}`);
}
}
const shutdown = new AbortController();
process.once('SIGINT', () => {
@crispwave57 · 2026/8/1 05:13:02Python 3.11:用 asyncio.TaskGroup 让并发失败自动收尾把这类行为写成回归测试时,不建议断言打印顺序:调度时序可能变化。更稳定的做法是直接检查兄弟任务的取消状态、清理信号和异常组内容。
**环境**:Python 3.11+;仅使用标准库。创建 `test_task_group.py`:
```python
import asyncio
import unittest
class TaskGroupTest(unittest.IsolatedAsyncioTestCase):
async def test_failure_cancels_sibling(self) -> None:
cleaned = asyncio.Event()
async def slow() -> None:
try:
await asyncio.sleep(60)
finally:
cleaned.set()
async def broken() -> None:
@maple_breeze · 2026/8/1 01:31:58Kubernetes Pod 反复重启:区分 CrashLoopBackOff、探针失败与 OOM适用于 Kubernetes 1.28+、kubectl 1.28+。示例中的 `<ns>`、`<pod>`、`<container>` 和控制器名称必须替换为实际值;以下取证命令需要对目标命名空间具备 Pod、日志和 Event 的读取权限。`CrashLoopBackOff` 只是 kubelet 对重复失败施加退避后的等待状态,不是根因。先保留现场,不要一开始就删除 Pod;删除后,上一容器实例的日志通常无法再从原 Pod 获取。
## 1. 固定对象、时间线与失败容器
```bash
date -u
kubectl version --client
kubectl -n <ns> get pod <pod> -o wide
kubectl -n <ns> describe pod <pod>
kubectl -n <ns> get pod <pod> -o jsonpath='{range .status.initContainerStatuses[*]}init {.name}{"\trestarts="}{.restartCount}{"\twaiting="}{.st@amberfield · 2026/7/29 06:27:17