接着上一节问

一个协程里面写了两次 await,两份工作会自动同时开始吗?先运行,再判断。

import asyncio

async def generate(rollout_id):
    print("start", rollout_id)
    await asyncio.sleep(0)
    print("end", rollout_id)
    return rollout_id

async def exercise():
    first = await generate(10)
    second = await generate(11)
    print("results", [first, second])

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

下载并运行本节 example.py。只使用 Python 标准库;推荐 Python 3.12,最低 Python 3.11。

运行结果:

start 10
end 10
start 11
end 11
results [10, 11]

exercise() 要等第一份结果返回,才会走到第二个 generate。本节先读清这一条执行链:进入协程 → 等待 → 恢复 → 返回。

跟着第一份调用走一次

exercise()
  │
  ├─ await generate(10):进入 generate 的函数体
  │    ├─ 打印 start 10
  │    ├─ await asyncio.sleep(0):当前执行链暂停一次
  │    ├─ 恢复后打印 end 10
  │    └─ return 10
  │
  ├─ 第一份调用返回后,才进入 generate(11)
  └─ 最后打印 results

await generate(10) 要等待整个 generate(10) 返回。内部的 await asyncio.sleep(0) 则是它执行过程中的一次等待;恢复后,先继续这一份 generate 剩下的代码。

因此,内部暂停过,不代表外层已经执行完这一行。第二行 await generate(11) 仍然要等第一行结束。

对比:保留赋值与去掉赋值

两组都使用最上面的同一个 generate()。

保留赋值:

async def with_assignment():
    first = await generate(10)
    second = await generate(11)

去掉赋值:

async def without_assignment():
    await generate(10)
    await generate(11)

两组输出完全相同:

A: with assignment
start 10
end 10
start 11
end 11
B: without assignment
start 10
end 10
start 11
end 11

first = 和 second = 只保存返回值。即使不保存,await 也要等这份调用返回后,才能继续下一行。

下载 comparison.py,运行这两组对比。这是独立的标准库语言实验,不是 Slime 原始源码。

暂停之后,为什么还是先完成 10

当前实验只有这一条执行链。第二个 generate 还没开始,不能因为第一份内部暂停,就自动提前运行第二行。

这里的 sleep(0) 让出一次后可以很快恢复;如果换成 sleep(1),即使没有其他工作,也要等计时条件满足。没有别的工作可运行,不等于这次等待被跳过。

等待时间与代码执行要分开看

对于 await asyncio.sleep(...),等待时间继续流逝,但当前协程的代码暂时不向下执行。

await asyncio.sleep(2)
print("继续执行")

这两秒里,协程停在 await,还不会执行后面的 print。这叫挂起,不是退出或终止;也不是函数体在后台继续跑。

两秒到了,只是满足了继续执行的条件。还要轮到这个协程获得执行机会,后面的 print 才会运行。其他代码执行所消耗的时间,不会让这次 sleep 的等待重新计时。

下一节再学习怎样安排另一份工作。在学到那里之前,先不要求从本实验中看出交错执行。

不只有 sleep 才能暂停

关键是等待的操作是否需要暂停,而不是函数名叫不叫 sleep。asyncio.sleep() 本身也是协程;网络读取等异步操作也可能需要等待。反过来,协程如果一路执行到 return,没有遇到需要暂停的操作,也可以直接返回。

因此,看见 await 时先问两件事:

  1. 这一行要等谁的返回结果?
  2. 被等待的代码内部,在哪里需要暂停?

回到 Slime:等待完成标记

_await_done_marker() 会先等待一段时间,再读取外部命令的完成标记。如果标记还没出现,就继续下一轮;读取成功时才返回退出码。

这里只关注三处顺序:await asyncio.sleep(5)、await sb.exec(...)、return。sb.exec 是执行环境提供的异步操作,具体实现在后续源码阅读时展开。

展开 Slime 源码:_await_done_marker 的等待与返回

_await_done_marker
slime/agent/sandbox.py · L73–L79
快照 2f2318653f6f794dddd321eff7c9d4b7b174643f· 查看固定版本源码

    deadline = time.time() + time_budget_sec
    while time.time() < deadline:
        await asyncio.sleep(5)
        ec, out, _ = await sb.exec(f"test -f {done_file} && cat {done_file}", user=user, timeout=15, check=False)
        if ec == 0 and (out or "").strip():
            return int(out.strip())
    return EXIT_TIME_BUDGET_EXCEEDED

用自己的话回答

第一份 generate 内部等待过,为什么第二份还没有开始?去掉 first = 会改变顺序吗?

查看解释

内部等待只是第一份调用执行过程中的暂停。第一份还没返回,外层就还没执行到第二行。赋值只保存结果,去掉它不改变直接 await 的先后顺序。

语义核对:协程、sleep。

本节对应的全部源码位置

下面把同类用法在 Slime 中的每个扫描位置接回本节讲解;点击文件名可查看完整源码快照。重复出现的 API 共用解释,具体输入与清理由所在函数决定。

展开本节 442 条源码记录
记录 / 讲解源码位置原代码
occ-000009examples/coding_agent_rl/generate.py:109
boot_agent_sandbox
await cand.__aenter__()
occ-000011examples/coding_agent_rl/generate.py:111
boot_agent_sandbox
await HARNESS_CLS().install_cli(cand)
occ-000012examples/coding_agent_rl/generate.py:113
boot_agent_sandbox
await cand.__aexit__(None, None, None)
occ-000014examples/coding_agent_rl/generate.py:127
boot_agent_sandbox
await asyncio.sleep(1 + attempt + random.random())
occ-000015examples/coding_agent_rl/generate.py:127
boot_agent_sandbox
await asyncio.sleep(1 + attempt + random.random())
occ-000017examples/coding_agent_rl/generate.py:134
boot_agent_sandbox
await sb.__aexit__(None, None, None)
occ-000023examples/coding_agent_rl/generate.py:204
generate
await swe.prepare_workspace(sb, md["workdir"], md)
occ-000024examples/coding_agent_rl/generate.py:205
generate
agent_exit_code = await HARNESS_CLS().run(
occ-000025examples/coding_agent_rl/generate.py:213
generate
diff_text = await swe.git_diff(sb, md["workdir"])
occ-000026examples/coding_agent_rl/generate.py:215
generate
reward, applied_cleanly = await swe.run_evaluation(
occ-000027examples/coding_agent_rl/generate.py:237
generate
samples = await state.adapter.finish_session(
occ-000029examples/coding_agent_rl/generate.py:282
generate
await state.adapter.drop_session(session_id, wait_timeout=30) # cleanup only, idempotent
occ-000030examples/coding_agent_rl/generate.py:283
generate
await asyncio.sleep(10)
occ-000031examples/coding_agent_rl/generate.py:283
generate
await asyncio.sleep(10)
occ-000072examples/coding_agent_rl/swe.py:185
prepare_workspace
await agent_sandbox.ensure_agent_user(sb, workdir)
occ-000076examples/coding_agent_rl/swe.py:190
prepare_workspace
await apply_before_repo_set_cmd(sb, workdir, swepro)
occ-000078examples/coding_agent_rl/swe.py:193
prepare_workspace
await apply_pre_commands(sb, workdir, pre_commands)
occ-000079examples/coding_agent_rl/swe.py:194
prepare_workspace
await sb.write_file(
occ-000083examples/coding_agent_rl/swe.py:207
apply_before_repo_set_cmd
await sb.exec(
occ-000084examples/coding_agent_rl/swe.py:210
apply_before_repo_set_cmd
await sb.write_file("/workspace/swepro_setup/before.sh", payload, user="agent")
occ-000085examples/coding_agent_rl/swe.py:211
apply_before_repo_set_cmd
await sb.exec("bash /workspace/swepro_setup/before.sh", user="agent", check=False, timeout=600)
occ-000088examples/coding_agent_rl/swe.py:223
apply_pre_commands
await sb.write_file(_PRE, "set -e\n" + body, user="agent")
occ-000089examples/coding_agent_rl/swe.py:224
apply_pre_commands
await sb.exec(f"chmod 755 {_PRE} && cd {workdir} && bash {_PRE}", user="agent", check=False, timeout=600)
occ-000091examples/coding_agent_rl/swe.py:232
git_diff
_, out, _ = await sb.exec(cmd, user="agent", timeout=120)
occ-000094examples/coding_agent_rl/swe.py:246
run_evaluation
return await _grade_swebench(md, diff_text, timeout_sec)
occ-000095examples/coding_agent_rl/swe.py:247
run_evaluation
return await _grade_scaleswe(md, diff_text, timeout_sec)
occ-000103examples/coding_agent_rl/swe.py:270
_grade_scaleswe
await agent_sandbox.ensure_agent_user(ev, workdir)
occ-000104examples/coding_agent_rl/swe.py:272
_grade_scaleswe
await _setup_swepro_assets(ev, swepro)
occ-000105examples/coding_agent_rl/swe.py:273
_grade_scaleswe
await apply_before_repo_set_cmd(ev, workdir, swepro)
occ-000106examples/coding_agent_rl/swe.py:275
_grade_scaleswe
await apply_pre_commands(ev, workdir, pre_commands)
occ-000107examples/coding_agent_rl/swe.py:277
_grade_scaleswe
applied = await _apply_diff(ev, workdir, diff_text)
occ-000108examples/coding_agent_rl/swe.py:282
_grade_scaleswe
r = await _run_swepro(ev, workdir, swepro, timeout_sec)
occ-000109examples/coding_agent_rl/swe.py:284
_grade_scaleswe
r = await _run_eval_cmd(ev, workdir, eval_cmd, timeout_sec)
occ-000110examples/coding_agent_rl/swe.py:286
_grade_scaleswe
r = await _run_f2p_script(ev, workdir, f2p_script, timeout_sec)
occ-000112examples/coding_agent_rl/swe.py:291
_setup_swepro_assets
await ev.exec(f"mkdir -p {_SWEPRO_DIR} && chmod 777 {_SWEPRO_DIR}", user="root", check=True)
occ-000114examples/coding_agent_rl/swe.py:295
_setup_swepro_assets
await ev.write_file(f"{_SWEPRO_DIR}/{dst}", Path(host_p), user="root")
occ-000115examples/coding_agent_rl/swe.py:296
_setup_swepro_assets
await ev.exec(f"chmod 755 {_SWEPRO_DIR}/* && chown -R agent:agent {_SWEPRO_DIR}", user="root", check=True)
occ-000117examples/coding_agent_rl/swe.py:302
_apply_diff
await ev.write_file(_PATCH, diff_text, user="agent")
occ-000119examples/coding_agent_rl/swe.py:312
_apply_diff
ec, _, _ = await ev.exec(f"cd {workdir} && ({ladder})", user="agent", check=False, timeout=120)
occ-000123examples/coding_agent_rl/swe.py:321
_run_swepro
await ev.exec(
occ-000124examples/coding_agent_rl/swe.py:327
_run_swepro
await ev.exec(
occ-000125examples/coding_agent_rl/swe.py:333
_run_swepro
raw = await ev.read_file(result_f, user="agent")
occ-000131examples/coding_agent_rl/swe.py:342
_run_eval_cmd
ec, _, _ = await ev.exec(f"cd {workdir} && {cmd}", user="agent", check=False, timeout=timeout)
occ-000133examples/coding_agent_rl/swe.py:350
_run_f2p_script
await ev.write_file(_F2P, script, user="agent")
occ-000134examples/coding_agent_rl/swe.py:351
_run_f2p_script
ec, _, _ = await ev.exec(f"cd {workdir} && python {_F2P}", user="agent", check=False, timeout=timeout)
occ-000137examples/coding_agent_rl/swe.py:373
_apply_model_patch
ec, _, _ = await ev.exec(cmd, user="root", check=False, timeout=120)
occ-000149examples/coding_agent_rl/swe.py:466
_grade_swebench
await asyncio.gather(
occ-000151examples/coding_agent_rl/swe.py:472
_grade_swebench
if not await _apply_model_patch(ev, md["workdir"]):
occ-000152examples/coding_agent_rl/swe.py:475
_grade_swebench
exit_code, log = await exec_and_wait(
occ-000161examples/geo3k_vlm_multi_turn/rollout.py:201
_run_inference_step
output = await post(url, payload)
occ-000164examples/geo3k_vlm_multi_turn/rollout.py:336
generate
await _run_inference_step(url, sample.tokens, cur_sampling_params, current_image_data, state.tokenizer)
occ-000169examples/multi_agent/agent_system.py:37
generate_response
output = await post(url, payload)
occ-000171examples/multi_agent/agent_system.py:99
Agent.run
response = await generate_response(args, prompt, key=key)
occ-000174examples/multi_agent/agent_system.py:117
SolverAgent.generate_initial_solution
return await self.run(args, prompt, max_retries=3, key="solver")
occ-000176examples/multi_agent/agent_system.py:138
RewriterAgent.rewrite
return await self.run(args, prompt, max_retries=1, key="rewriter")
occ-000178examples/multi_agent/agent_system.py:159
SelectorAgent.select
return await self.run(args, prompt, max_retries=10, key="selector")
occ-000180examples/multi_agent/agent_system.py:178
rewrite_worker
new_solution = await rewriter.rewrite(args, problem_statement, previous_solutions)
occ-000182examples/multi_agent/agent_system.py:189
solver_worker
current_solution = await solver.generate_initial_solution(args, problem_statement)
occ-000184examples/multi_agent/agent_system.py:222
run_agent_system
results = await asyncio.gather(*tasks, return_exceptions=True)
occ-000186examples/multi_agent/agent_system.py:224
run_agent_system
rewards = await batched_async_rm(args, args.results_dict["solver"])
occ-000187examples/multi_agent/agent_system.py:244
run_agent_system
rewrited_solutions_raw = await asyncio.gather(*tasks, return_exceptions=True)
occ-000189examples/multi_agent/agent_system.py:252
run_agent_system
rewards = await batched_async_rm(args, args.results_dict["rewriter"])
occ-000190examples/multi_agent/agent_system.py:263
run_agent_system
response = await selector.select(args, problem_statement, rewrited_solutions)
occ-000192examples/multi_agent/rollout_with_multi_agents.py:29
generate_with_multi_agents
samples = await custom_multi_agent_func(args, sample)
occ-000198examples/retool/generate_with_retool.py:193
execute_predictions
result = await tool_registry.execute_tool("code_interpreter", {"code": code})
occ-000201examples/retool/generate_with_retool.py:299
generate
output = await post(url, payload)
occ-000202examples/retool/generate_with_retool.py:335
generate
next_obs, done = await execute_predictions(cur_response)
occ-000218examples/retool/tool_sandbox.py:344
ToolRegistry.execute_tool
return await self._execute_python(arguments)
occ-000221examples/retool/tool_sandbox.py:355
ToolRegistry._execute_python
result = await self.python_sandbox.execute_code(code)
occ-000226examples/search-r1/generate_with_search.py:70
search
result = await local_search(
occ-000227examples/search-r1/generate_with_search.py:80
search
result = await google_search(
occ-000230examples/search-r1/generate_with_search.py:130
execute_predictions
search_results = await search(search_query)
occ-000233examples/search-r1/generate_with_search.py:188
generate
output = await post(url, payload)
occ-000234examples/search-r1/generate_with_search.py:235
generate
next_obs, done = await execute_predictions(cur_response)
occ-000243examples/search-r1/google_search_server.py:55
fetch
raw = await response.read()
occ-000249examples/search-r1/google_search_server.py:70
fetch_all
return await asyncio.gather(*tasks)
occ-000255examples/search-r1/google_search_server.py:115
google_search
response = await resp.json()
occ-000261examples/search-r1/google_search_server.py:133
google_search
web_contents = await fetch_all(links)
occ-000267examples/search-r1/local_search_server.py:69
local_search
result = await resp.json()
occ-000271examples/strands_sglang/generate_with_strands.py:66
generate
await agent.invoke_async(prompt)
occ-000295examples/tau-bench/generate_with_tau.py:147
generate
interaction_result = await agent.asolve(env, agent.rollout_args, agent.sampling_params, task_index)
occ-000297examples/tau-bench/trainable_agents.py:102
TrainableAgentMixin._call_llm
return await post(url, payload)
occ-000302examples/tau-bench/trainable_agents.py:232
TrainableAgentMixin.asolve
output = await self._call_llm(url, payload)
occ-000303examples/tau-bench/trainable_agents.py:293
TrainableAgentMixin.asolve
env_response = await self._execute_tool(env, action)
occ-000310slime/agent/adapters/anthropic.py:74
AnthropicAdapter._respond
return await _render_stream(request, blocks, stop_reason, in_tok, out_tok)
occ-000333slime/agent/adapters/anthropic.py:223
_render_stream
await out.prepare(request)
occ-000334slime/agent/adapters/anthropic.py:238
_render_stream
await out.write(f"event: message_start\ndata: {json.dumps(ms_data, ensure_ascii=False)}\n\n".encode())
occ-000336slime/agent/adapters/anthropic.py:256
_render_stream
await out.write(f"event: content_block_start\ndata: {json.dumps(cbs_data, ensure_ascii=False)}\n\n".encode())
occ-000338slime/agent/adapters/anthropic.py:259
_render_stream
await out.write(f"event: content_block_delta\ndata: {json.dumps(cbd_data, ensure_ascii=False)}\n\n".encode())
occ-000340slime/agent/adapters/anthropic.py:262
_render_stream
await out.write(f"event: content_block_stop\ndata: {json.dumps(cbe_data, ensure_ascii=False)}\n\n".encode())
occ-000342slime/agent/adapters/anthropic.py:269
_render_stream
await out.write(f"event: message_delta\ndata: {json.dumps(md_data, ensure_ascii=False)}\n\n".encode())
occ-000344slime/agent/adapters/anthropic.py:272
_render_stream
await out.write(f"event: message_stop\ndata: {json.dumps(mst_data, ensure_ascii=False)}\n\n".encode())
occ-000347slime/agent/adapters/anthropic.py:280
_count_tokens
await request.read()
occ-000367slime/agent/adapters/common.py:233
BaseAdapter.shutdown_session._drain
_, pending = await asyncio.wait(tasks, timeout=wait_timeout)
occ-000370slime/agent/adapters/common.py:237
BaseAdapter.shutdown_session._drain
await asyncio.gather(*pending, return_exceptions=True)
occ-000373slime/agent/adapters/common.py:241
BaseAdapter.shutdown_session
await asyncio.wrap_future(asyncio.run_coroutine_threadsafe(_drain(), loop))
occ-000378slime/agent/adapters/common.py:261
BaseAdapter.finish_session
await self.shutdown_session(sid, wait_timeout=wait_timeout)
occ-000380slime/agent/adapters/common.py:279
BaseAdapter.drop_session
await self.shutdown_session(sid, wait_timeout=wait_timeout)
occ-000384slime/agent/adapters/common.py:325
BaseAdapter._run_turn
body = await request.json()
occ-000386slime/agent/adapters/common.py:344
BaseAdapter._run_turn
turn = await call_sglang_generate(prompt_ids, s, body, adapter=self, session_id=sid)
occ-000389slime/agent/adapters/common.py:363
BaseAdapter._run_turn
response = await self._respond(request, body, reply, in_tok, out_tok, stream)
occ-000403slime/agent/adapters/common.py:486
call_sglang_generate
text = await r.text()
occ-000404slime/agent/adapters/common.py:496
call_sglang_generate
data = await r.json(content_type=None)
occ-000411slime/agent/adapters/common.py:506
call_sglang_generate
await _abort_sglang_request(sglang_url, rid, logger)
occ-000418slime/agent/adapters/common.py:532
_abort_sglang_request
await abort_worker(sglang_url)
occ-000419slime/agent/adapters/common.py:535
_abort_sglang_request
payload = await response.json()
occ-000422slime/agent/adapters/common.py:547
_abort_sglang_request
await asyncio.gather(*(abort_worker(url) for url in worker_urls))
occ-000428slime/agent/adapters/openai.py:72
OpenAIAdapter._respond
return await _render_stream(request, body, wire_message, wire_finish, in_tok, out_tok)
occ-000452slime/agent/adapters/openai.py:347
_render_stream
await out.prepare(request)
occ-000455slime/agent/adapters/openai.py:361
_render_stream.emit
await out.write(f"data: {json.dumps(chunk, ensure_ascii=False)}\n\n".encode())
occ-000457slime/agent/adapters/openai.py:363
_render_stream
await emit({"role": "assistant"})
occ-000459slime/agent/adapters/openai.py:366
_render_stream
await emit({"reasoning_content": reasoning})
occ-000461slime/agent/adapters/openai.py:369
_render_stream
await emit({"content": content})
occ-000463slime/agent/adapters/openai.py:375
_render_stream
await emit({"tool_calls": [{**call, "index": idx} for idx, call in enumerate(tool_calls)]})
occ-000464slime/agent/adapters/openai.py:376
_render_stream
await emit({}, finish_reason=wire_finish, usage=_usage(in_tok, out_tok))
occ-000465slime/agent/adapters/openai.py:377
_render_stream
await out.write(b"data: [DONE]\n\n")
occ-000472slime/agent/aiohttp_threaded.py:35
AppHandle.stop._shutdown
await self.runner.cleanup()
occ-000490slime/agent/harness/claude_code.py:37
ClaudeCodeHarness.install_cli
await install_npm_cli(
occ-000492slime/agent/harness/claude_code.py:47
ClaudeCodeHarness.write_config
await sb.exec(
occ-000494slime/agent/harness/claude_code.py:71
ClaudeCodeHarness.launch_and_wait
return await run_agent(sb, workdir=ctx.workdir, start_cmd=cmd, env=env, time_budget_sec=time_budget_sec)
occ-000496slime/agent/harness/codex.py:49
CodexHarness.install_cli
await install_npm_cli(
occ-000498slime/agent/harness/codex.py:59
CodexHarness.write_config
await sb.exec(
occ-000500slime/agent/harness/codex.py:86
CodexHarness.launch_and_wait
return await run_agent(sb, workdir=ctx.workdir, start_cmd=cmd, env=env, time_budget_sec=time_budget_sec)
occ-000506slime/agent/harness/common.py:97
BaseHarness.run
await _sandbox.ensure_agent_user(sb, workdir)
occ-000507slime/agent/harness/common.py:103
BaseHarness.run
await self.write_config(sb, ctx)
occ-000508slime/agent/harness/common.py:104
BaseHarness.run
return await self.launch_and_wait(sb, ctx, prompt, time_budget_sec)
occ-000510slime/agent/harness/common.py:110
run_agent
await sb.exec(f"mkdir -p {meta_dir} && chown agent:agent {meta_dir}", user="root", check=True, timeout=30)
occ-000511slime/agent/harness/common.py:111
run_agent
exit_code, _ = await exec_and_wait(
occ-000513slime/agent/harness/common.py:135
install_npm_cli
await install_node22(sb, node_runtime)
occ-000514slime/agent/harness/common.py:137
install_npm_cli
await sb.write_file("/tmp/harness-cli.tgz", npm_package)
occ-000515slime/agent/harness/common.py:142
install_npm_cli
exit_code, last_log = await exec_and_wait(
occ-000516slime/agent/harness/common.py:148
install_npm_cli
await asyncio.sleep(NPM_INSTALL_BACKOFF_SEC * (attempt + 1))
occ-000517slime/agent/harness/common.py:148
install_npm_cli
await asyncio.sleep(NPM_INSTALL_BACKOFF_SEC * (attempt + 1))
occ-000519slime/agent/harness/common.py:167
install_node22
await sb.write_file("/tmp/node22.tar", host_tarball)
occ-000520slime/agent/harness/common.py:168
install_node22
await sb.exec(
occ-000528slime/agent/sandbox.py:75
_await_done_marker
await asyncio.sleep(5)
occ-000529slime/agent/sandbox.py:75
_await_done_marker
await asyncio.sleep(5)
occ-000530slime/agent/sandbox.py:76
_await_done_marker
ec, out, _ = await sb.exec(f"test -f {done_file} && cat {done_file}", user=user, timeout=15, check=False)
occ-000532slime/agent/sandbox.py:113
exec_and_wait
await sb.write_file(launcher, launcher_body, user=user)
occ-000533slime/agent/sandbox.py:122
exec_and_wait
await sb.exec(
occ-000534slime/agent/sandbox.py:129
exec_and_wait
await sb.exec(
occ-000535slime/agent/sandbox.py:139
exec_and_wait
exit_code = await _await_done_marker(sb, done_file, user=user, time_budget_sec=time_budget_sec)
occ-000536slime/agent/sandbox.py:143
exec_and_wait
return exit_code, await sb.read_file(out_file, user=user)
occ-000537slime/agent/sandbox.py:144
exec_and_wait
_, tail, _ = await sb.exec(f"tail -c 512 {out_file} 2>/dev/null", user=user, timeout=15, check=False)
occ-000539slime/agent/sandbox.py:249
E2BSandbox._rpc_retry
return await coro_factory()
occ-000540slime/agent/sandbox.py:257
E2BSandbox._rpc_retry
await self._reset_conn_pool()
occ-000541slime/agent/sandbox.py:269
E2BSandbox._rpc_retry
await asyncio.sleep(backoff)
occ-000542slime/agent/sandbox.py:269
E2BSandbox._rpc_retry
await asyncio.sleep(backoff)
occ-000544slime/agent/sandbox.py:277
E2BSandbox._reset_conn_pool
await pool.aclose()
occ-000546slime/agent/sandbox.py:298
E2BSandbox.__aenter__
self._sb = await self._rpc_retry("create", lambda: AsyncSandbox.create(timeout=self.timeout, metadata=md))
occ-000548slime/agent/sandbox.py:305
E2BSandbox.__aexit__
await self._sb.kill()
occ-000551slime/agent/sandbox.py:322
E2BSandbox.exec
res = await self._rpc_retry(
occ-000554slime/agent/sandbox.py:348
E2BSandbox.write_file._do_path
await self._sb.files.write(
occ-000556slime/agent/sandbox.py:357
E2BSandbox.write_file
await self._rpc_retry(f"write_file({sandbox_path} <- {host_path.name})", _do_path)
occ-000558slime/agent/sandbox.py:363
E2BSandbox.write_file._do_bytes
await self._sb.files.write(
occ-000560slime/agent/sandbox.py:372
E2BSandbox.write_file
await self._rpc_retry(f"write_file({sandbox_path}, bytes={len(content)})", _do_bytes)
occ-000561slime/agent/sandbox.py:375
E2BSandbox.write_file
await self._rpc_retry(
occ-000564slime/agent/sandbox.py:382
E2BSandbox.read_file
return await self._rpc_retry(
occ-000567slime/agent/sandbox.py:392
ensure_agent_user
await sb.exec(
occ-000591slime/backends/megatron_utils/server/megatron_server.py:356
_ray_get
return await asyncio.to_thread(ray.get, ref)
occ-000594slime/backends/megatron_utils/server/megatron_server.py:363
_read_json_payload
payload = await request.json()
occ-000598slime/backends/megatron_utils/server/megatron_server.py:394
_wait_until_idle
loads = await _ray_get(sample_manager.get_loads.remote())
occ-000599slime/backends/megatron_utils/server/megatron_server.py:399
_wait_until_idle
await asyncio.sleep(0.1)
occ-000600slime/backends/megatron_utils/server/megatron_server.py:399
_wait_until_idle
await asyncio.sleep(0.1)
occ-000609slime/backends/megatron_utils/server/megatron_server.py:441
_build_http_app.get_loads
return web.json_response(await _ray_get(sample_manager.get_loads.remote()))
occ-000611slime/backends/megatron_utils/server/megatron_server.py:447
_build_http_app.update_from_disk
payload = await _read_json_payload(request)
occ-000615slime/backends/megatron_utils/server/megatron_server.py:471
_build_http_app.update_from_disk
result = await asyncio.shield(update_future)
occ-000620slime/backends/megatron_utils/server/megatron_server.py:482
_build_http_app.update_from_disk
before_loads = await _wait_until_idle(sample_manager, timeout_s)
occ-000621slime/backends/megatron_utils/server/megatron_server.py:483
_build_http_app.update_from_disk
update_result = await asyncio.to_thread(update_from_disk_fn, model_path)
occ-000623slime/backends/megatron_utils/server/megatron_server.py:484
_build_http_app.update_from_disk
after_loads = await _ray_get(sample_manager.get_loads.remote())
occ-000628slime/backends/megatron_utils/server/megatron_server.py:521
_build_http_app.generate
payload = await _read_json_payload(request)
occ-000631slime/backends/megatron_utils/server/megatron_server.py:548
_build_http_app.generate
stats = await _ray_get(sample_manager.get_stats.remote())
occ-000632slime/backends/megatron_utils/server/megatron_server.py:570
_build_http_app.generate
request_id = await _ray_get(
occ-000633slime/backends/megatron_utils/server/megatron_server.py:581
_build_http_app.generate
result = await _ray_get(sample_manager.get_result.remote(request_id))
occ-000634slime/backends/megatron_utils/server/megatron_server.py:584
_build_http_app.generate
await asyncio.sleep(0.05)
occ-000635slime/backends/megatron_utils/server/megatron_server.py:584
_build_http_app.generate
await asyncio.sleep(0.05)
occ-000637slime/backends/megatron_utils/server/megatron_server.py:588
_build_http_app.generate
await _ray_get(sample_manager.cancel_request.remote(request_id))
occ-000672slime/backends/sglang_utils/server_control.py:39
get_live_router_workers
response = await client.get(f"{router_url}/workers")
occ-000675slime/backends/sglang_utils/server_control.py:44
get_live_router_workers.check
response = await client.get(f"{worker['url']}/health_generate")
occ-000677slime/backends/sglang_utils/server_control.py:50
get_live_router_workers.check
response = await client.delete(f"{router_url}/workers/{worker['id']}")
occ-000678slime/backends/sglang_utils/server_control.py:57
get_live_router_workers
workers = await asyncio.gather(*(check(worker) for worker in response.json()["workers"]))
occ-000695slime/backends/sglang_utils/server_control.py:153
_abort_server_once
await asyncio.wait_for(
occ-000698slime/backends/sglang_utils/server_control.py:160
_get_server_load
return await asyncio.wait_for(
occ-000702slime/backends/sglang_utils/server_control.py:199
abort_server_until_idle
await _abort_server_once(url, per_request_timeout)
occ-000703slime/backends/sglang_utils/server_control.py:210
abort_server_until_idle
load = await _get_server_load(url, min(request_timeout, remaining))
occ-000704slime/backends/sglang_utils/server_control.py:233
abort_server_until_idle
await asyncio.sleep(min(retry_interval, remaining))
occ-000705slime/backends/sglang_utils/server_control.py:233
abort_server_until_idle
await asyncio.sleep(min(retry_interval, remaining))
occ-000707slime/backends/sglang_utils/server_control.py:245
abort_servers_until_idle
results = await asyncio.gather(
occ-000809slime/data/queue_data_source.py:1115
QueueReader.get_samples_async
return await asyncio.get_running_loop().run_in_executor(self._reader, self.get_samples, num_samples)
occ-000832slime/data/transport.py:366
publish_rollout_async
return await run_rollout_io(args, pack_rollout_group, value, args, rollout_id, controller=controller)
occ-000833slime/data/transport.py:367
publish_rollout_async
return await run_rollout_io(args, pack_rollout_payload, value, args, rollout_id)
occ-000841slime/data/transport.py:379
run_rollout_io
return await asyncio.shield(pending)
occ-000845slime/data/transport.py:385
run_rollout_io
await asyncio.shield(pending)
occ-000850slime/data/transport.py:413
unpack_published_payload
return await asyncio.to_thread(unpack_rollout_payload, value)
occ-000852slime/data/transport.py:419
unpack_published_payload
return await asyncio.to_thread(unpack_rollout_payload, value)
occ-000886slime/observability/trace_utils.py:472
trace_function.decorator.async_wrapper
return await fn(*args, **kwargs)
occ-000887slime/observability/trace_utils.py:475
trace_function.decorator.async_wrapper
return await fn(*args, **kwargs)
occ-000937slime/rollout/fully_async_distributed.py:281
_GenerationActor.start
await asyncio.wrap_future(future)
occ-000946slime/rollout/fully_async_distributed.py:296
_GenerationActor.pause
await asyncio.wrap_future(future)
occ-000951slime/rollout/fully_async_distributed.py:303
_GenerationActor.next
return await asyncio.wrap_future(future)
occ-000956slime/rollout/fully_async_distributed.py:308
_GenerationActor._next
await asyncio.wait((take, self.producer), return_when=asyncio.FIRST_COMPLETED)
occ-000963slime/rollout/fully_async_distributed.py:313
_GenerationActor._next
return await take
occ-000965slime/rollout/fully_async_distributed.py:317
_GenerationActor._next
await asyncio.gather(take, return_exceptions=True)
occ-000969slime/rollout/fully_async_distributed.py:322
_GenerationActor._produce.generate_slot
output = await self._generate_group(self.rollout_id, group)
occ-000970slime/rollout/fully_async_distributed.py:325
_GenerationActor._produce.generate_slot
await self.outputs.put(output)
occ-000972slime/rollout/fully_async_distributed.py:333
_GenerationActor._produce
groups = await self.data_source.get_samples_async(min(64, self.capacity - offset))
occ-000974slime/rollout/fully_async_distributed.py:337
_GenerationActor._produce
await asyncio.sleep(0.001)
occ-000975slime/rollout/fully_async_distributed.py:337
_GenerationActor._produce
await asyncio.sleep(0.001)
occ-000976slime/rollout/fully_async_distributed.py:338
_GenerationActor._produce
await asyncio.gather(*tasks)
occ-000979slime/rollout/fully_async_distributed.py:342
_GenerationActor._produce
await asyncio.gather(*tasks, return_exceptions=True)
occ-000982slime/rollout/fully_async_distributed.py:348
_GenerationActor._generate_group
group = (await self.data_source.get_samples_async(1))[0]
occ-000983slime/rollout/fully_async_distributed.py:352
_GenerationActor._generate_group
await self._rebuffer(group)
occ-000984slime/rollout/fully_async_distributed.py:360
_GenerationActor._generate_group
group = await generate_and_rm_group(self.args, group, self.state.sampling_params.copy())
occ-000985slime/rollout/fully_async_distributed.py:364
_GenerationActor._generate_group
await self._rebuffer(group)
occ-000986slime/rollout/fully_async_distributed.py:373
_GenerationActor._generate_group
await asyncio.to_thread(
occ-000988slime/rollout/fully_async_distributed.py:382
_GenerationActor._generate_group
group = await publish_rollout_async(
occ-000989slime/rollout/fully_async_distributed.py:387
_GenerationActor._generate_group
accepted = await publish_rollout_async(
occ-000990slime/rollout/fully_async_distributed.py:394
_GenerationActor._generate_group
group = await asyncio.to_thread(self.data_source.materialize_samples, group)
occ-000996slime/rollout/fully_async_distributed.py:405
_GenerationActor._rebuffer
await asyncio.shield(future)
occ-000999slime/rollout/fully_async_distributed.py:409
_GenerationActor._flush_rebuffers
await asyncio.sleep(0.01)
occ-001000slime/rollout/fully_async_distributed.py:409
_GenerationActor._flush_rebuffers
await asyncio.sleep(0.01)
occ-001001slime/rollout/fully_async_distributed.py:413
_GenerationActor._flush_rebuffers
await asyncio.to_thread(self.data_source.add_samples, [group for group, _ in batch])
occ-001009slime/rollout/fully_async_distributed.py:436
_GenerationActor.close
await asyncio.wrap_future(future)
occ-001013slime/rollout/fully_async_distributed.py:442
_GenerationActor._close
await asyncio.gather(self.producer, return_exceptions=True)
occ-001015slime/rollout/fully_async_distributed.py:444
_GenerationActor._close
await self._rebuffer_task
occ-001016slime/rollout/fully_async_distributed.py:447
_GenerationActor._close
await asyncio.get_running_loop().shutdown_default_executor()
occ-001047slime/rollout/fully_async_rollout.py:192
AsyncRolloutWorker._loop
await asyncio.sleep(0)
occ-001048slime/rollout/fully_async_rollout.py:192
AsyncRolloutWorker._loop
await asyncio.sleep(0)
occ-001053slime/rollout/fully_async_rollout.py:226
AsyncRolloutWorker._loop
await asyncio.sleep(self.poll_interval)
occ-001054slime/rollout/fully_async_rollout.py:226
AsyncRolloutWorker._loop
await asyncio.sleep(self.poll_interval)
occ-001055slime/rollout/fully_async_rollout.py:237
AsyncRolloutWorker._loop
await asyncio.wait(active_tasks, timeout=30)
occ-001063slime/rollout/fully_async_rollout.py:306
_generate_rollout_async
group = await publish_rollout_async(
occ-001064slime/rollout/fully_async_rollout.py:312
_generate_rollout_async
await asyncio.to_thread(
occ-001067slime/rollout/fully_async_rollout.py:324
_generate_rollout_async
await asyncio.sleep(0.05)
occ-001068slime/rollout/fully_async_rollout.py:324
_generate_rollout_async
await asyncio.sleep(0.05)
occ-001069slime/rollout/fully_async_rollout.py:357
_generate_rollout_async
output = await asyncio.to_thread(
occ-001075slime/rollout/on_policy_distillation.py:29
reward_func
return await resp.json()
occ-001079slime/rollout/rm_hub/__init__.py:45
remote_rm
return await resp.json()
occ-001080slime/rollout/rm_hub/__init__.py:52
remote_rm
await asyncio.sleep(backoff)
occ-001081slime/rollout/rm_hub/__init__.py:52
remote_rm
await asyncio.sleep(backoff)
occ-001083slime/rollout/rm_hub/__init__.py:59
async_rm
return await rm_function(args, sample, **kwargs)
occ-001084slime/rollout/rm_hub/__init__.py:63
async_rm
return await rm_function(args, sample, **kwargs)
occ-001086slime/rollout/rm_hub/__init__.py:76
async_rm
return await remote_rm(args, sample)
occ-001088slime/rollout/rm_hub/__init__.py:107
batched_async_rm
return await rm_function(args, samples, **kwargs)
occ-001089slime/rollout/rm_hub/__init__.py:109
batched_async_rm
rewards = await asyncio.gather(*tasks)
occ-001110slime/rollout/sample_hooks.py:42
_apply_to_sample
result = await result
occ-001113slime/rollout/sample_hooks.py:61
apply_rollout_sample_hooks
return await _apply_to_sample(args, value, paths, **kwargs)
occ-001114slime/rollout/sample_hooks.py:63
apply_rollout_sample_hooks.<comprehension>
return [await apply_rollout_sample_hooks(args, item, **kwargs) for item in value]
occ-001122slime/rollout/sglang_rollout.py:220
generate
output = await post(
occ-001126slime/rollout/sglang_rollout.py:267
_run_request_abortable_generate
return await generate_call
occ-001130slime/rollout/sglang_rollout.py:283
_run_server_abort_generate
return await generate_call
occ-001133slime/rollout/sglang_rollout.py:330
generate_and_rm
await state.generation_pacer.wait()
occ-001135slime/rollout/sglang_rollout.py:345
generate_and_rm
sample = await _run_request_abortable_generate(state, sample, generate_call)
occ-001136slime/rollout/sglang_rollout.py:347
generate_and_rm
sample = await _run_server_abort_generate(state, generate_call)
occ-001137slime/rollout/sglang_rollout.py:350
generate_and_rm
sample = await apply_rollout_sample_hooks(args, sample, evaluation=evaluation)
occ-001138slime/rollout/sglang_rollout.py:364
generate_and_rm
rewards = await batched_async_rm(args, samples_need_reward)
occ-001139slime/rollout/sglang_rollout.py:374
generate_and_rm
sample.reward = await async_rm(args, sample)
occ-001142slime/rollout/sglang_rollout.py:414
generate_and_rm_group
group = await asyncio.gather(*tasks)
occ-001144slime/rollout/sglang_rollout.py:419
generate_and_rm_group
rewards = await batched_async_rm(args, group)
occ-001147slime/rollout/sglang_rollout.py:441
abort
workers = (await get(f"{router_url}/workers"))["workers"]
occ-001148slime/rollout/sglang_rollout.py:445
abort
workers = await get_live_router_workers(router_url, timeout=args.rollout_health_check_timeout)
occ-001149slime/rollout/sglang_rollout.py:447
abort
await abort_servers_until_idle(urls)
occ-001150slime/rollout/sglang_rollout.py:449
abort
await asyncio.gather(*cancellable_tasks, return_exceptions=True)
occ-001152slime/rollout/sglang_rollout.py:454
abort
done, state.pendings = await asyncio.wait(state.pendings, return_when=asyncio.FIRST_COMPLETED)
occ-001157slime/rollout/sglang_rollout.py:517
generate_rollout_async
samples = await reader.get_samples_async(args.over_sampling_batch_size)
occ-001158slime/rollout/sglang_rollout.py:523
generate_rollout_async
done, state.pendings = await asyncio.wait(state.pendings, return_when=asyncio.FIRST_COMPLETED)
occ-001162slime/rollout/sglang_rollout.py:545
generate_rollout_async
await asyncio.to_thread(
occ-001164slime/rollout/sglang_rollout.py:561
generate_rollout_async
group = await publish_rollout_async(group, args, rollout_id, group=True, controller=controller)
occ-001166slime/rollout/sglang_rollout.py:571
generate_rollout_async
aborted_samples = await abort(args, rollout_id)
occ-001168slime/rollout/sglang_rollout.py:585
generate_rollout_async.<comprehension>
await publish_rollout_async(group, args, rollout_id, group=True, controller=controller)
occ-001169slime/rollout/sglang_rollout.py:588
generate_rollout_async
data = await publish_rollout_async(data, args, rollout_id)
occ-001170slime/rollout/sglang_rollout.py:594
generate_rollout_async
output = await asyncio.to_thread(
occ-001173slime/rollout/sglang_rollout.py:609
eval_rollout
results_list = await asyncio.gather(*coros)
occ-001178slime/rollout/sglang_rollout.py:726
eval_rollout_single_dataset
sample = await coro
occ-001202slime/utils/async_utils.py:31
AsyncPacer.wait
await future
occ-001249slime/utils/http_utils.py:183
_ShardedHTTPTransport.handle_async_request
return await transport.handle_async_request(request)
occ-001251slime/utils/http_utils.py:186
_ShardedHTTPTransport.aclose
await asyncio.gather(*(transport.aclose() for transport in self._transports))
occ-001254slime/utils/http_utils.py:197
_post
response = await client.post(url, **request_kwargs)
occ-001255slime/utils/http_utils.py:199
_post
content = await response.aread()
occ-001256slime/utils/http_utils.py:204
_post
output = await asyncio.to_thread(decode_score_centering_response, content, score_centering_top_k)
occ-001258slime/utils/http_utils.py:223
_post
await asyncio.sleep(1)
occ-001259slime/utils/http_utils.py:223
_post
await asyncio.sleep(1)
occ-001260slime/utils/http_utils.py:227
_post
await response.aclose()
occ-001263slime/utils/http_utils.py:298
_init_ray_distributed_post._HttpPosterActor.do_post
return await _post(
occ-001265slime/utils/http_utils.py:351
post
return await obj_ref
occ-001266slime/utils/http_utils.py:356
post
return await _post(
occ-001268slime/utils/http_utils.py:368
get
response = await _http_client.get(url, timeout=timeout)
occ-001270slime/utils/http_utils.py:371
get
content = await response.aread()
occ-001271slime/utils/http_utils.py:374
get
await response.aclose()
occ-001313slime_plugins/rollout_buffer/buffer.py:115
set_body_size
response = await call_next(request)
occ-001319slime_plugins/rollout_buffer/buffer.py:262
write_to_buffer
data = await request.json()
occ-001327slime_plugins/rollout_buffer/buffer.py:327
start_rollout
payload = await request.json()
occ-001331slime_plugins/rollout_buffer/generator/base_generator.py:8
<module>
from time import sleep
occ-001355slime_plugins/rollout_buffer/rollout_buffer_example.py:146
get_rollout_data
resp_json = await response.json()
occ-001356slime_plugins/rollout_buffer/rollout_buffer_example.py:149
get_rollout_data
await asyncio.sleep(3)
occ-001357slime_plugins/rollout_buffer/rollout_buffer_example.py:149
get_rollout_data
await asyncio.sleep(3)
occ-001360slime_plugins/rollout_buffer/rollout_buffer_example.py:244
generate_rollout_async
data, meta_info = await get_rollout_data(api_base_url=base_url)
occ-001403tests/fanout_test_helpers.py:57
compact_generate
base_sample = await generate(args, sample, sampling_params)
occ-001447tests/rollout_health_test_helpers.py:48
generate_rollout.crash_then_abort
result = await original_abort(config, current_rollout)
occ-001463tests/test_agent/_fakes.py:159
FakeSGLangServer._handle
self.requests.append(await request.json())
occ-001465tests/test_agent/_fakes.py:177
FakeSGLangServer.__aenter__
await self._server.start_server()
occ-001467tests/test_agent/_fakes.py:183
FakeSGLangServer.__aexit__
await self._server.close()
occ-001474tests/test_agent/_fakes.py:271
FakeSandbox.exec
code = await self.on_launch(env or {})
occ-001481tests/test_agent/test_adapters.py:74
_drain
return await adapter.finish_session(sid, base_sample=Sample(index=0, prompt=""), reward=1.0)
occ-001484tests/test_agent/test_adapters.py:175
test_anthropic_messages_nonstream_records_token_segments.run_case
await client.start_server()
occ-001485tests/test_agent/test_adapters.py:177
test_anthropic_messages_nonstream_records_token_segments.run_case
resp = await client.post(
occ-001486tests/test_agent/test_adapters.py:182
test_anthropic_messages_nonstream_records_token_segments.run_case
data = await resp.json()
occ-001487tests/test_agent/test_adapters.py:184
test_anthropic_messages_nonstream_records_token_segments.run_case
await client.close()
occ-001489tests/test_agent/test_adapters.py:185
test_anthropic_messages_nonstream_records_token_segments.run_case
samples = await _drain(adapter, "sid-a")
occ-001493tests/test_agent/test_adapters.py:211
test_openai_chat_completions_nonstream_records_token_segments.run_case
await client.start_server()
occ-001494tests/test_agent/test_adapters.py:213
test_openai_chat_completions_nonstream_records_token_segments.run_case
resp = await client.post(
occ-001495tests/test_agent/test_adapters.py:218
test_openai_chat_completions_nonstream_records_token_segments.run_case
data = await resp.json()
occ-001496tests/test_agent/test_adapters.py:220
test_openai_chat_completions_nonstream_records_token_segments.run_case
await client.close()
occ-001498tests/test_agent/test_adapters.py:221
test_openai_chat_completions_nonstream_records_token_segments.run_case
samples = await _drain(adapter, "sid-o")
occ-001502tests/test_agent/test_adapters.py:245
test_anthropic_messages_streams_blocks.run_case
await client.start_server()
occ-001503tests/test_agent/test_adapters.py:247
test_anthropic_messages_streams_blocks.run_case
resp = await client.post(
occ-001504tests/test_agent/test_adapters.py:257
test_anthropic_messages_streams_blocks.run_case
raw = await resp.text()
occ-001505tests/test_agent/test_adapters.py:259
test_anthropic_messages_streams_blocks.run_case
await client.close()
occ-001507tests/test_agent/test_adapters.py:260
test_anthropic_messages_streams_blocks.run_case
await _drain(adapter, "sid-as")
occ-001512tests/test_agent/test_adapters.py:279
test_openai_chat_completions_streams_chunks_until_done.run_case
await client.start_server()
occ-001513tests/test_agent/test_adapters.py:281
test_openai_chat_completions_streams_chunks_until_done.run_case
resp = await client.post(
occ-001514tests/test_agent/test_adapters.py:286
test_openai_chat_completions_streams_chunks_until_done.run_case
raw = await resp.text()
occ-001515tests/test_agent/test_adapters.py:288
test_openai_chat_completions_streams_chunks_until_done.run_case
await client.close()
occ-001517tests/test_agent/test_adapters.py:289
test_openai_chat_completions_streams_chunks_until_done.run_case
await _drain(adapter, "sid-os")
occ-001521tests/test_agent/test_adapters.py:320
test_anthropic_multiturn_wire_roundtrip_and_token_capture.run_case
await client.start_server()
occ-001522tests/test_agent/test_adapters.py:325
test_anthropic_multiturn_wire_roundtrip_and_token_capture.run_case
first = await client.post(
occ-001523tests/test_agent/test_adapters.py:335
test_anthropic_multiturn_wire_roundtrip_and_token_capture.run_case
fdata = await first.json()
occ-001524tests/test_agent/test_adapters.py:337
test_anthropic_multiturn_wire_roundtrip_and_token_capture.run_case
second = await client.post(
occ-001525tests/test_agent/test_adapters.py:356
test_anthropic_multiturn_wire_roundtrip_and_token_capture.run_case
await second.json()
occ-001526tests/test_agent/test_adapters.py:358
test_anthropic_multiturn_wire_roundtrip_and_token_capture.run_case
await client.close()
occ-001528tests/test_agent/test_adapters.py:359
test_anthropic_multiturn_wire_roundtrip_and_token_capture.run_case
samples = await _drain(adapter, "sid-mt")
occ-001532tests/test_agent/test_adapters.py:390
test_max_turns_per_sid_returns_429.run_case
await client.start_server()
occ-001533tests/test_agent/test_adapters.py:394
test_max_turns_per_sid_returns_429.run_case
first = await client.post("/v1/messages", headers=h, json=body)
occ-001534tests/test_agent/test_adapters.py:395
test_max_turns_per_sid_returns_429.run_case
second = await client.post("/v1/messages", headers=h, json=body)
occ-001535tests/test_agent/test_adapters.py:397
test_max_turns_per_sid_returns_429.run_case
await client.close()
occ-001537tests/test_agent/test_adapters.py:398
test_max_turns_per_sid_returns_429.run_case
await _drain(adapter, "sid-cap")
occ-001547tests/test_agent/test_agent_rollout_cpu.py:78
<module>
_REAL_SLEEP = asyncio.sleep
occ-001549tests/test_agent/test_agent_rollout_cpu.py:82
_fast_sleep
await _REAL_SLEEP(0)
occ-001553tests/test_agent/test_agent_rollout_cpu.py:121
_anthropic_agent
data = await r.json()
occ-001556tests/test_agent/test_agent_rollout_cpu.py:181
test_generate_produces_trained_samples.run_case
samples = await gen.generate(_args(), _base_sample(), sampling_params={"max_new_tokens": 32})
occ-001561tests/test_agent/test_agent_rollout_cpu.py:209
test_generate_aborts_on_empty_trajectory.run_case
samples = await gen.generate(_args(), _base_sample(), sampling_params={})
occ-001565tests/test_agent/test_agent_rollout_cpu.py:224
test_generate_aborts_on_missing_image.run_case
samples = await gen.generate(_args(), _base_sample(image=""), sampling_params={})
occ-001571tests/test_agent/test_agent_rollout_cpu.py:249
_codex_agent
data = await r.json()
occ-001574tests/test_agent/test_agent_rollout_cpu.py:274
test_codex_openai_rollout_closes_loop.run_case
rc = await CodexHarness().run(
occ-001575tests/test_agent/test_agent_rollout_cpu.py:282
test_codex_openai_rollout_closes_loop.run_case
samples = await adapter.finish_session(sid, base_sample=Sample(index=0, prompt=""), reward=1.0)
occ-001579tests/test_agent/test_harness.py:35
<module>
_REAL_SLEEP = asyncio.sleep
occ-001581tests/test_agent/test_harness.py:39
_fast_sleep
await _REAL_SLEEP(0)
occ-001584tests/test_agent/test_harness.py:65
test_run_agent_returns_marker_exit_code.run_case
rc = await hc.run_agent(
occ-001588tests/test_agent/test_harness.py:85
test_run_agent_propagates_nonzero_exit.run_case
rc = await hc.run_agent(sb, workdir="/w", start_cmd="x", env={}, time_budget_sec=30)
occ-001591tests/test_agent/test_harness.py:95
test_run_agent_times_out_when_marker_never_appears.run_case
rc = await hc.run_agent(sb, workdir="/w", start_cmd="x", env={}, time_budget_sec=0)
occ-001594tests/test_agent/test_harness.py:109
test_claude_code_write_config_preacks_bypass_permissions.run_case
await ClaudeCodeHarness().write_config(sb, _ctx())
occ-001599tests/test_agent/test_harness.py:128
test_claude_code_launch_command_and_env.run_case
rc = await ClaudeCodeHarness().launch_and_wait(
occ-001602tests/test_agent/test_harness.py:154
test_codex_write_config_base64_roundtrips_inline_base_url.run_case
await CodexHarness().write_config(sb, _ctx(url="http://host:18001"))
occ-001606tests/test_agent/test_harness.py:176
test_codex_launch_command_and_env.run_case
rc = await CodexHarness().launch_and_wait(
occ-001609tests/test_agent/test_harness.py:197
test_ensure_agent_user_provisions_user_and_git_safe_dir.run_case
await sandbox_mod.ensure_agent_user(sb, "/workspace/repo")
occ-001613tests/test_agent/test_harness.py:218
test_base_harness_run_calls_steps_in_order.run_case
rc = await ClaudeCodeHarness().run(
occ-001626tests/test_agent/test_sandbox_exec_and_wait.py:135
test_same_tag_reinvocation_actually_reruns._two_attempts
first = await exec_and_wait(sb, cmd="npm install", time_budget_sec=60, tag="npm", want_output=True)
occ-001627tests/test_agent/test_sandbox_exec_and_wait.py:136
test_same_tag_reinvocation_actually_reruns._two_attempts
second = await exec_and_wait(sb, cmd="npm install", time_budget_sec=60, tag="npm", want_output=True)
occ-001663tests/test_distributed_rollout.py:618
test_slow_task_acquire_does_not_block_async_generation.exercise
await asyncio.sleep(0.01)
occ-001664tests/test_distributed_rollout.py:618
test_slow_task_acquire_does_not_block_async_generation.exercise
await asyncio.sleep(0.01)
occ-001668tests/test_distributed_rollout.py:623
test_slow_task_acquire_does_not_block_async_generation.exercise
assert len(await task) == 1
occ-001679tests/test_distributed_rollout.py:688
scheduler_factory.create.make_generator.execute
await asyncio.sleep(0.01)
occ-001680tests/test_distributed_rollout.py:688
scheduler_factory.create.make_generator.execute
await asyncio.sleep(0.01)
occ-001686tests/test_distributed_rollout.py:735
scheduler_factory.cleanup
await asyncio.gather(*producers, return_exceptions=True)
occ-001722tests/test_distributed_rollout.py:990
test_worker_refills_locally_and_slow_group_does_not_block_results.generate_group
await release.wait()
occ-001724tests/test_distributed_rollout.py:992
test_worker_refills_locally_and_slow_group_does_not_block_results.generate_group
await asyncio.sleep(0)
occ-001725tests/test_distributed_rollout.py:992
test_worker_refills_locally_and_slow_group_does_not_block_results.generate_group
await asyncio.sleep(0)
occ-001728tests/test_distributed_rollout.py:1007
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
await worker._start(0)
occ-001729tests/test_distributed_rollout.py:1009
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
first = await asyncio.wait_for(worker._next(), timeout=5)
occ-001731tests/test_distributed_rollout.py:1010
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
second = await asyncio.wait_for(worker._next(), timeout=5)
occ-001734tests/test_distributed_rollout.py:1017
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
output = await asyncio.wait_for(worker._next(), timeout=5)
occ-001736tests/test_distributed_rollout.py:1020
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
await asyncio.sleep(0.02)
occ-001737tests/test_distributed_rollout.py:1020
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
await asyncio.sleep(0.02)
occ-001738tests/test_distributed_rollout.py:1022
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
await asyncio.sleep(0.02)
occ-001739tests/test_distributed_rollout.py:1022
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
await asyncio.sleep(0.02)
occ-001740tests/test_distributed_rollout.py:1026
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
await worker._pause()
occ-001742tests/test_distributed_rollout.py:1029
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
while (output := await asyncio.wait_for(worker._next(), timeout=5)) is not None:
occ-001746tests/test_distributed_rollout.py:1037
test_worker_refills_locally_and_slow_group_does_not_block_results.exercise
await asyncio.gather(worker.producer, return_exceptions=True)
occ-001750tests/test_distributed_rollout.py:1054
_generate_locally
await asyncio.sleep(0.01)
occ-001751tests/test_distributed_rollout.py:1054
_generate_locally
await asyncio.sleep(0.01)
occ-001752tests/test_distributed_rollout.py:1055
_generate_locally
await asyncio.sleep(0.01 * (sample.group_index % 3))
occ-001753tests/test_distributed_rollout.py:1055
_generate_locally
await asyncio.sleep(0.01 * (sample.group_index % 3))
occ-001775tests/test_distributed_rollout.py:1832
test_cancelled_rebuffer_waiter_does_not_drop_its_continuation.exercise
await asyncio.sleep(0.001)
occ-001776tests/test_distributed_rollout.py:1832
test_cancelled_rebuffer_waiter_does_not_drop_its_continuation.exercise
await asyncio.sleep(0.001)
occ-001778tests/test_distributed_rollout.py:1834
test_cancelled_rebuffer_waiter_does_not_drop_its_continuation.exercise
await asyncio.gather(*waiters, return_exceptions=True)
occ-001804tests/test_distributed_rollout.py:2080
test_queue_fetch_finishing_after_pause_preserves_group_without_new_generation.run.fetch
await release.wait()
occ-001809tests/test_distributed_rollout.py:2095
test_queue_fetch_finishing_after_pause_preserves_group_without_new_generation.run
await entered.wait()
occ-001811tests/test_distributed_rollout.py:2096
test_queue_fetch_finishing_after_pause_preserves_group_without_new_generation.run
await worker._pause()
occ-001813tests/test_distributed_rollout.py:2098
test_queue_fetch_finishing_after_pause_preserves_group_without_new_generation.run
assert await task is None
occ-001842tests/test_fully_async_rollout.py:267
test_local_worker_lifecycle_is_scoped_to_source.generate
await asyncio.sleep(0.01)
occ-001843tests/test_fully_async_rollout.py:267
test_local_worker_lifecycle_is_scoped_to_source.generate
await asyncio.sleep(0.01)
occ-001941tests/test_rollout_sample_hooks.py:63
test_concurrent_groups_keep_their_own_rollout_hook_context.generate
await asyncio.sleep(0)
occ-001942tests/test_rollout_sample_hooks.py:63
test_concurrent_groups_keep_their_own_rollout_hook_context.generate
await asyncio.sleep(0)
occ-001943tests/test_rollout_sample_hooks.py:64
test_concurrent_groups_keep_their_own_rollout_hook_context.generate
sample = await apply_rollout_sample_hooks(args, Sample(index=rollout_id))
occ-001945tests/test_rollout_sample_hooks.py:68
test_concurrent_groups_keep_their_own_rollout_hook_context.exercise
assert await asyncio.gather(generate(10), generate(11)) == [("seen", 10), ("seen", 11)]
occ-001958tests/test_rollout_straw_transport.py:381
test_synchronous_rollout_stores_during_generation_and_preserves_legacy_hook.exercise.generate
await second.wait()
occ-001963tests/test_rollout_straw_transport.py:409
test_synchronous_rollout_stores_during_generation_and_preserves_legacy_hook.exercise
return await asyncio.wait_for(sr.generate_rollout_async(args, 0, lambda count: [None] * count), timeout=20)
occ-002002tests/test_score_centering_transport.py:216
test_evaluation_preserves_training_score_centering.run
await rollout.generate_and_rm(a, Sample(), {"temperature": 0}, evaluation=True)
occ-002003tests/test_score_centering_transport.py:217
test_evaluation_preserves_training_score_centering.run
await rollout.generate_and_rm(a, Sample(), {"temperature": 0.8})
occ-002027tests/test_server_control.py:239
test_http_transport_preserves_streams_timeouts_and_connection_budget.check.serve
headers = await reader.readuntil(b"\r\n\r\n")
occ-002029tests/test_server_control.py:248
test_http_transport_preserves_streams_timeouts_and_connection_budget.check.serve
body = await reader.readexactly(length)
occ-002031tests/test_server_control.py:250
test_http_transport_preserves_streams_timeouts_and_connection_budget.check.serve
await asyncio.sleep(0.1)
occ-002032tests/test_server_control.py:250
test_http_transport_preserves_streams_timeouts_and_connection_budget.check.serve
await asyncio.sleep(0.1)
occ-002034tests/test_server_control.py:252
test_http_transport_preserves_streams_timeouts_and_connection_budget.check.serve
await writer.drain()
occ-002038tests/test_server_control.py:258
test_http_transport_preserves_streams_timeouts_and_connection_budget.check.serve
await writer.wait_closed()
occ-002040tests/test_server_control.py:261
test_http_transport_preserves_streams_timeouts_and_connection_budget.check
server = await asyncio.start_server(serve, "127.0.0.1", 0, backlog=2 * concurrency)
occ-002045tests/test_server_control.py:269
test_http_transport_preserves_streams_timeouts_and_connection_budget.check.request
assert await response.aread() == body
occ-002046tests/test_server_control.py:272
test_http_transport_preserves_streams_timeouts_and_connection_budget.check
await asyncio.gather(*(request(i) for i in range(concurrency + 3)))
occ-002048tests/test_server_control.py:276
test_http_transport_preserves_streams_timeouts_and_connection_budget.check
await client.post(url + "/slow", content=b"x", timeout=0.01)
occ-002049tests/test_server_control.py:277
test_http_transport_preserves_streams_timeouts_and_connection_budget.check
assert (await client.post(url, content=b"after-timeout")).content == b"after-timeout"
occ-002051tests/test_server_control.py:280
test_http_transport_preserves_streams_timeouts_and_connection_budget.check
await server.wait_closed()
occ-002053tests/test_server_control.py:281
test_http_transport_preserves_streams_timeouts_and_connection_budget.check
await asyncio.gather(*tasks, return_exceptions=True)
occ-002063tests/test_straw_fully_async_recovery.py:49
_generate_with_interrupt
await asyncio.Event().wait()
occ-002066tests/test_straw_fully_async_recovery.py:52
_generate_with_interrupt
await asyncio.Event().wait()
occ-002069tests/test_straw_fully_async_recovery.py:53
_generate_with_interrupt
sample = await _generate_locally(args, sample, sampling_params)
occ-002101tests/test_straw_r3.py:163
test_cancelled_straw_publication_drains_before_releasing_capacity.run
assert await asyncio.to_thread(entered.wait, 5)
occ-002105tests/test_straw_r3.py:167
test_cancelled_straw_publication_drains_before_releasing_capacity.run
await asyncio.sleep(0.05)
occ-002106tests/test_straw_r3.py:167
test_cancelled_straw_publication_drains_before_releasing_capacity.run
await asyncio.sleep(0.05)
occ-002108tests/test_straw_r3.py:169
test_cancelled_straw_publication_drains_before_releasing_capacity.run
await asyncio.sleep(0.05)
occ-002109tests/test_straw_r3.py:169
test_cancelled_straw_publication_drains_before_releasing_capacity.run
await asyncio.sleep(0.05)
occ-002112tests/test_straw_r3.py:174
test_cancelled_straw_publication_drains_before_releasing_capacity.run
results = await asyncio.gather(*tasks, return_exceptions=True)
occ-002141tests/test_streaming_rollout.py:369
test_stream_cancellation_closes_request_and_keeps_prefix.lines
await asyncio.Event().wait()
occ-002146tests/test_streaming_rollout.py:377
test_stream_cancellation_closes_request_and_keeps_prefix.server_generate
await server_released.wait()
occ-002154tests/test_streaming_rollout.py:401
test_stream_cancellation_closes_request_and_keeps_prefix.exercise
await asyncio.gather(first_chunk_seen.wait(), server_started.wait())
occ-002158tests/test_streaming_rollout.py:402
test_stream_cancellation_closes_request_and_keeps_prefix.exercise
await sglang_rollout.abort(args, rollout_id=0)
occ-002159tests/test_streaming_rollout.py:403
test_stream_cancellation_closes_request_and_keeps_prefix.exercise
return await asyncio.gather(request_task, server_task)
occ-002166tests/test_streaming_rollout.py:421
test_unrelated_stream_cancellation_propagates.lines
await asyncio.Event().wait()
occ-002172tests/test_streaming_rollout.py:435
test_unrelated_stream_cancellation_propagates.exercise
await request_started.wait()
occ-002176tests/test_streaming_rollout.py:439
test_unrelated_stream_cancellation_propagates.exercise
await task
occ-002180tests/test_streaming_rollout.py:472
test_partial_abort_buffers_and_resumes_only_aborted_siblings.exercise.<comprehension>
asyncio.create_task(asyncio.sleep(0, result=group)) for group in (mixed_group, [terminal], [empty])
occ-002181tests/test_streaming_rollout.py:486
test_partial_abort_buffers_and_resumes_only_aborted_siblings.exercise
buffered_groups = await sglang_rollout.abort(args, rollout_id=7)
occ-002185tests/test_streaming_rollout.py:511
test_partial_abort_buffers_and_resumes_only_aborted_siblings.exercise
resumed_group = await sglang_rollout.generate_and_rm_group(args, mixed_group, {"max_new_tokens": 1})
occ-002196tests/test_streaming_rollout.py:558
test_generation_pacing_preserves_concurrency_cancellation_and_reuse.exercise.generate
await finish.wait()
occ-002199tests/test_streaming_rollout.py:573
test_generation_pacing_preserves_concurrency_cancellation_and_reuse.exercise
await asyncio.wait_for(first_batch.wait(), 1)
occ-002205tests/test_streaming_rollout.py:579
test_generation_pacing_preserves_concurrency_cancellation_and_reuse.exercise
await tasks[70]
occ-002206tests/test_streaming_rollout.py:581
test_generation_pacing_preserves_concurrency_cancellation_and_reuse.exercise
await asyncio.wait_for(all_started.wait(), 1)
occ-002210tests/test_streaming_rollout.py:585
test_generation_pacing_preserves_concurrency_cancellation_and_reuse.exercise
await asyncio.gather(*(task for i, task in enumerate(tasks) if i != 70))
occ-002212tests/test_streaming_rollout.py:586
test_generation_pacing_preserves_concurrency_cancellation_and_reuse.exercise
assert (await start(128)).status == Sample.Status.COMPLETED
occ-002219tests/test_streaming_rollout.py:602
test_abort_while_waiting_for_generation_pacer_does_not_start_request.exercise.wait_for_release
await release.wait()
occ-002221tests/test_streaming_rollout.py:603
test_abort_while_waiting_for_generation_pacer_does_not_start_request.exercise.wait_for_release
await wait()
occ-002224tests/test_streaming_rollout.py:612
test_abort_while_waiting_for_generation_pacer_does_not_start_request.exercise
await queued.wait()
occ-002227tests/test_streaming_rollout.py:615
test_abort_while_waiting_for_generation_pacer_does_not_start_request.exercise
assert (await task).status == Sample.Status.ABORTED

专题首页 · 上一节 · 下一节:03 · Task 与 gather:把多份工作安排起来 · 源码与教程对照 · 全部用法