From 66751fedd82323eb206e71d4e0ec3c83bc367122 Mon Sep 17 00:00:00 2001 From: dprevoznik <58714078+dprevoznik@users.noreply.github.com> Date: Fri, 9 Oct 2026 18:44:03 +0000 Subject: [PATCH 1/7] Add parallel task execution cookbook guide --- browsers/parallel-task-execution.mdx | 115 +++++++++++++++++++++++++++ cookbooks.mdx | 4 + docs.json | 8 +- 3 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 browsers/parallel-task-execution.mdx diff --git a/browsers/parallel-task-execution.mdx b/browsers/parallel-task-execution.mdx new file mode 100644 index 00000000..c7ac2d15 --- /dev/null +++ b/browsers/parallel-task-execution.mdx @@ -0,0 +1,115 @@ +--- +title: "Parallel Task Execution" +sidebarTitle: "Parallel Task Execution" +description: "Execute multiple tasks in parallel on a single profiled browser session." +--- + +Use one profiled browser when several tasks need the same browser identity at the same time. Give each task a named [Playwright executor](/browsers/playwright-execution#executors), so each task gets its own tab while tasks on different executors run concurrently. + +This pattern is useful when the browser must save changes to a profile. All task tabs share the browser's cookies and persistent origin storage, and the browser writes the complete profile once when the run ends. If tasks only read profile state, use a separate read-only browser for each task instead; see [Sharing and concurrency](/browsers/profiles/concurrency). + +## How it works + +1. Start one browser with the shared profile and `save_changes: true`. Use `start_url` when you want to replace tabs restored from an earlier run. +2. Bound the number of active tasks. A browser supports up to eight named executors, and memory, CPU, site behavior, or model limits can become constraints first. +3. Assign each task an executor name such as `lane-1` or `lane-2`. Send every Playwright call for that task to the same executor so its `page` remains bound to one tab. +4. Keep each task's work in its executor-owned tab. Browser state persists between calls, but local JavaScript variables do not. +5. Delete an executor and close its tab before reusing its name for another task. Delete the browser after all tasks finish so the profile is saved. + +## Run tasks in parallel + +Use `Promise.all` or `asyncio.gather` for concurrent tasks. A production worker pool can reuse a fixed set of executor names as tasks finish. + +The examples assume that the `parallel-task-demo` profile already exists. + + +```typescript TypeScript +import Kernel from '@onkernel/sdk'; + +const kernel = new Kernel(); +const browser = await kernel.browsers.create({ + stealth: true, + start_url: 'https://www.kernel.sh/', + profile: { + name: 'parallel-task-demo', + save_changes: true, + }, +}); + +const runTask = (executor: string, url: string) => + kernel.browsers.playwright.execute(browser.session_id, { + executor, + code: ` + await page.goto(${JSON.stringify(url)}); + return { title: await page.title(), url: page.url() }; + `, + timeout_sec: 10, + }); + +const results = await Promise.all([ + runTask('lane-1', 'https://www.kernel.sh/docs/'), + runTask('lane-2', 'https://www.kernel.sh/changelog'), +]); + +console.log(results.map((result) => result.result)); + +for (const executor of ['lane-1', 'lane-2']) { + await kernel.browsers.playwright.executors.delete(executor, { + id_or_name: browser.session_id, + close_tab: true, + }); +} +await kernel.browsers.deleteByID(browser.session_id); +``` + +```python Python +import asyncio + +from kernel import AsyncKernel + +kernel = AsyncKernel() + + +async def main(): + browser = await kernel.browsers.create( + stealth=True, + start_url="https://www.kernel.sh/", + profile={ + "name": "parallel-task-demo", + "save_changes": True, + }, + ) + + async def run_task(executor: str, url: str): + return await kernel.browsers.playwright.execute( + browser.session_id, + executor=executor, + code=f""" + await page.goto({url!r}); + return {{ title: await page.title(), url: page.url() }}; + """, + timeout_sec=10, + ) + + results = await asyncio.gather( + run_task("lane-1", "https://www.kernel.sh/docs/"), + run_task("lane-2", "https://www.kernel.sh/changelog"), + ) + print([result.result for result in results]) + + for executor in ("lane-1", "lane-2"): + await kernel.browsers.playwright.executors.delete( + executor, + id_or_name=browser.session_id, + close_tab=True, + ) + await kernel.browsers.delete_by_id(browser.session_id) + + +asyncio.run(main()) +``` + + +One task failing doesn't need to stop the other tasks, but the run must still clean up every executor and the browser. Publish task results as they finish when callers need progress before the full run completes. + +For a complete worker pool with bounded concurrency, lane reuse, result publishing, and fault-tolerant cleanup, see the [parallel profile Playwright executors cookbook](https://github.com/kernel/cookbooks/pull/10). diff --git a/cookbooks.mdx b/cookbooks.mdx index d21a0b8d..d598d9ac 100644 --- a/cookbooks.mdx +++ b/cookbooks.mdx @@ -34,6 +34,10 @@ import { CookbookSearch } from '/snippets/cookbook-search.jsx';
common patterns
Hold an agent while Kernel's captcha solver works, and tell it what actually happened. + +
common patterns
+ Execute multiple tasks in parallel on a single profiled browser session. +
## Harnesses & models diff --git a/docs.json b/docs.json index 567cde9e..68f599b8 100644 --- a/docs.json +++ b/docs.json @@ -133,7 +133,13 @@ "start/quickstart", "skills/overview", "integrations/overview", - "cookbooks" + "cookbooks", + { + "group": "Common patterns", + "pages": [ + "browsers/parallel-task-execution" + ] + } ] }, { From 30e14444ca08284ce9ed404b90d11a22298284e2 Mon Sep 17 00:00:00 2001 From: dprevoznik <58714078+dprevoznik@users.noreply.github.com> Date: Fri, 9 Oct 2026 18:45:48 +0000 Subject: [PATCH 2/7] Update parallel task artwork --- images/cookbooks/playwright.png | Bin 14913 -> 10134 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/cookbooks/playwright.png b/images/cookbooks/playwright.png index b222648ccf5e67717608d615277c1d50467b104a..5746841c53fe75b6653819a2b9c5bf32c5de7084 100644 GIT binary patch literal 10134 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 literal 14913 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 TwBLft1TL9hHLLl@Bl&*;O}ei7 From 2539d0ac77fa22033ffc01a718eea73f8288fb6c Mon Sep 17 00:00:00 2001 From: dprevoznik <58714078+dprevoznik@users.noreply.github.com> Date: Fri, 9 Oct 2026 18:50:58 +0000 Subject: [PATCH 3/7] Keep pattern guide off the main navigation --- docs.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/docs.json b/docs.json index 68f599b8..567cde9e 100644 --- a/docs.json +++ b/docs.json @@ -133,13 +133,7 @@ "start/quickstart", "skills/overview", "integrations/overview", - "cookbooks", - { - "group": "Common patterns", - "pages": [ - "browsers/parallel-task-execution" - ] - } + "cookbooks" ] }, { From cb86338c2b039ad92770c611b287ac291816b111 Mon Sep 17 00:00:00 2001 From: dprevoznik <58714078+dprevoznik@users.noreply.github.com> Date: Fri, 9 Oct 2026 19:36:13 +0000 Subject: [PATCH 4/7] Give parallel task card its own artwork --- cookbooks.mdx | 2 +- images/cookbooks/parallel-task-execution.png | Bin 0 -> 10134 bytes images/cookbooks/playwright.png | Bin 10134 -> 14913 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 images/cookbooks/parallel-task-execution.png diff --git a/cookbooks.mdx b/cookbooks.mdx index 0c4f1d49..4b83aea7 100644 --- a/cookbooks.mdx +++ b/cookbooks.mdx @@ -34,7 +34,7 @@ import { CookbookSearch } from '/snippets/cookbook-search.jsx';
common patterns
Hold an agent while Kernel's captcha solver works, and tell it what actually happened. - +
common patterns
Execute multiple tasks in parallel on a single profiled browser session.
diff --git a/images/cookbooks/parallel-task-execution.png b/images/cookbooks/parallel-task-execution.png new file mode 100644 index 0000000000000000000000000000000000000000..5746841c53fe75b6653819a2b9c5bf32c5de7084 GIT binary patch literal 10134 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 literal 0 HcmV?d00001 diff --git a/images/cookbooks/playwright.png b/images/cookbooks/playwright.png index 5746841c53fe75b6653819a2b9c5bf32c5de7084..b222648ccf5e67717608d615277c1d50467b104a 100644 GIT binary patch literal 14913 zcmeIZXH-*J^f!DFg>f8Y0xFU={krH|^2oXYvlq5jfbNRo|`}JMxUC*ayEkC5)o1AlYIluiod+(%Oy9$^1 z{qXMq07zWAXm$etM90C0*KcCrmCpI`E%0UUor{j)0I*Mb=OF?-FOUTQ{{z$v z$S;B)cKe>cavlKcG5dJ8_JE)FN0>WA*dTl&qHl$H0~Y?i!MBR)pLzj+LB}Pt^EYEe z7}I<6UfCwh3f&_k_3#bMGu+NkS--u$*GfGcK^!C=(>!@rE;H2SgWunp0iI{lGL*M) z_y4xwAIbg0OhNC@gOKEgy}kQ)_3!VWL6VS5Q{;BnjT?Q;(XXs6BhoASXc)5^Nsm>d za0)mDo!SFwIwIhrGR8B&XW#}p2zTT+|8I+yFM39+{M9PyJ*xIq{8+$aNJ|??nhEfX8>v8(1lNhv zShLU1prJg3dBL3kTHlo>6XHOb z+9L_TxaoThI#4an(=7Lk+q6sZV25;Zf)6p*R7>_7&^3IlLF9$FSXr80=?E>p!A*Ur zo9unGDIXv#C8G(bK$RvkIvB{SFw+G#KEC6ayP*6Ps%QRX$1fX(WNdy!r8~5Bd|(H> zlmKk9K8htN9)A=+BSY_bmo_goG4I>kHVKV)B=XY(3-*DdIPHvbE^Wb*;9Q;|X>VxW zL1a-nHL2~EXJ6t^0!b(Sxh;B5l1I~n>-|2BKRQ7pp*PvS)kgaP8<0RInFaqL+^mc| zfHPb7%l@)bEVuduh1nF&2#Ay7fU*iGYg%vYNO~=Pka8yw!Af zq~{7$Jn51pI70(dV8f4YDjk~^J7lIxi>!U)9G^fR>SrZR#*1{_1~qc@(q76u20j(z zs1Q2vwWxfWLS$K!vNq|IO4xkM)~=*aaB!T*TGaS0$+PxS7WJu4BjXG7ZY0b^(2fo# zXtauB$HbC8od>^_92Kx>EhLQ{GMfCsud2zFBGXWsRCSaJb;X$;In*QKK}`z+E?#@P z-Hn5-;Eg|+%eAR-w#F_%isQqHGA0i2_Q_fiK>EVYjOm@%g^ZEo>}w3FulE7&^K>P_ z@^E`(-ihykMkuJ=zuR~n1D9v#sxlX)$P{B$s=C|3(08xy)dwFo05YJUio9-GWHYxS zi7-jx{ebd+)f4`v7E_?BSOmJ2G0~kfkQpR;jtMSEwp6M`rpVP)vGxs>J`}>SRU8tH zHjm%NfG&nlV+2~k#FJK!Hi&rqG4Wb3@<8(qZy}x`KyyP7o?Hb;af}V|N^bNOSn;gr zE}-tjb2*?ZZweVmER|$M(Q5{srX52&j9R!d@B&s3WFIywh8+mopAfh8kFO^cZ z00;`mxGmZxo2`NWZpfPZWTa)J(J;Mt5uR%n&zghmxRsv3gjz2yE;^~?4`}FGfNRO9 z*&h5Z|K2TkWz4Nvi%LZd_YH8(jMhgWNa)~Jr>yLEF~H*D&akK2RH-kyp1q4EN3SI# zS6PwfYXeej(bvy(==*H4SajMCZ;UzUn{@AVhEi7CRpKob z^Po2VEazb`;6T{fyMgJux-6PP9S=#Vszzal-t@5@I5UUx3tkRUEbl#54jy+~Z!G+qMp4$J|i(Hp72` zj&WS(tz*=(OO_l zT*_gs_Yh(jOx*HRUQ~)$bX({56|`lit@``qYNe&D4i#=ZXI zd<8vS@hfT=hxiNO{Gzj#x4cyv`aJKb;7?LNss9Fy9e*Uz)kMbU+3)?pj8~&B6-Stu zmbzX3JEU`Zf`aO^)vT@#+)bEHK3of@@KP66Lnbpup)x?-d8H#s z{&c<2X&#b6QtA|vAki~73A%rh=PfJgEW9L?*S4n3QO|PN{!tcd!gi=)wmEEHBvzA$ zEwKW}$p2zOq`&RM*8Jss$T6QHKb(iHyJ}o)T)qW;I^IvXl2Pkl#1yPeY>*eHD(%UG zKf(rh4GU{A;ied42du5?dDj*Pg2h?2$=egpvx74tvHa(la zR8HSd&wOC-XpAecami+$-sd?TUfER?(%TdXjLCvVs>@y+nm3vssa%S!)AoJ;UsIT) zwo`)rwA+%sjQLbTcqY~J?_1Nsq<3PbYNjai6;`ZA+_Ngx|3o#~K&FzysNz^mMFszH z>VR%wBl>hp+L(Va+Evm|O7xhCV%=pz>FV^(k@>jjn^>Fo@WZ3i z`%MxVbOP^^hD86Q65vq^0@}MZ1hg75DMo+jL)@%SRa)`0h(rmdw~e)*KU(R}|2Y#v zR_^4~Is)m1TlWW2`zDB7Ovpf;(JGg8ubhKWQV)UXy)vEi;d?Nh>( zfhP<%g}5^ll*rr!vVa$9Dp~fjVH*UUjE`a-4mJ2z0j|^I^m(VUN2W0d=`N0urkSM+ zheJM{-+Obte_@mq>D*j#m7@k5K2|sRX7R|^zV|)7jQv5!Ms$)LOFFBPg9jTIed!9K zfbQknq8g`EpCUHtM~>(y%03H$m*>+lCbB2u6xt1$cs8pc^NDR)d3p7Yv>GtLL)M3s z>F;0rZnQIT-M0HobN_${a0CoWvQHP=8`i#j>=gKdSDV3w%I^H6!Q*gEl~E}n#g>!3 zVHom9*~>MohHv8k<0&cL>kKca6Z`UWa=!YKnwRoR)F5uNGpi@8VcOr+N?5%5lf9hsa= z^Nx>Dlp*s7pmD0@=PnP27K(9Mp*goYfj?SVsxslHwrWypz{5|6KyZ3@3GWm^q_3cf z=Du07T*-2XcO?e*dw+6uH8m{_d1S#{2AQy|@{S9hno=&yl){VJ+)u4i#&4!vv`ucG zvTn;}ye!&ULMLQZ(C#9v#(jDArkSm?fe_B=8cdsuT{`0?gOUuYrFBOnt?2W_DrJG4 z8htuq@ly#eu~F9%P54vu`!O*b znWd+J{}}eTrS1X#$j7>Yb7MulCdOhvzUDh9;Utz_CDAeK&kEmsODKin-HM}D8^gG$ z&GERImhi@&5Yh!vAms|^$w8AVXA>+euruBaI%n!|sa748Q*m~FlLb{U;(pDmp@ z)|6f~xVBhk>{s7k0wmp%9tZw#cI5eYj}Cb~m|w|xpI%?^1n*Ia#`2g0ZliOoDb~or zukP!?*q`b;J_abr@z-wkg_m5kw-3+f10(jX+q7p$`|X@z6Q3Cc|Z5dE)!p zDqP9#6x8)-F1PdNG8)r)mRjp3y_!RK*t)v5z;165rH^Q)-+lk(`Ip4^$R(Bua~sw| z(G&q-p2a((l2qRRr&agG-u~57jHOEm?l|>?dRptsV{|1-YdQbO=GK;T4Zkhw0P+lM zv(iq&WB{&+Ze8QWoxp^0r(s1AH;5wESz|u5ADIh@w9goQ>N7}gqPpx$U zqn_!EU4VrdXjUcf-BCTpun?T?hbtf)3!e^-<1u~~$;ED^O)iKWgzC_LeFmSRDMo9r zPa&TPHm3+@or6K|@|b53*ppO2(vvEPR=Aju#^wgh!T!>AGnoH-l(8D!+yJtC)z9+-EtT}i2)e(&NyNIq(&^*c@den>N zZ|XDmJt~vvTai_>`Pz5Ub8n&6o_M+f*{!wGP%YKMr!8&m4K%^~ClX#_IGdgtr|}qX zVy*A-#a_mZ`yNAo zn68Bj77f}1pA@TCXjpzB6K7223U8>-yR1y_&(f#LMK<9wHfz_Tp7#~RvgGH)nQ5Wg z5f!NGis9pi9aU5}w|wvZK-Q1PaT>QSnCiLpCJYop>qo90G8XmtzN2VejouC<$Y6+Q zR<8Mw-7rQEk&F;}<-ZQGsE}chr&fG4eU43Bc0kQR#cDCb9sT4^!NkbWFBqFpkOMf`?bfHpQcu3NmvCn$cbF(Xd!#;Ey>v3OGxZqbmb_($O5aa$>XZM1R)(Vx#CpIp{`Le=#-SZEs;W9+KAc;QEE6QIorX}hdb&@{y$hbxmF*)<$9oftJI_!BhGHaf#cCL!j7yuA1BSgdV;f=e(x3;9}js>W1I%!w%*U+koe~QxlB;jqO_hdNl-6Tw~iqgT7_tNXL zzCIlx`9?5%@BuvgmZFmr>$QDRfr#z=?h{^J2I)t$8pD|H!^?1(uYr=Ltx{*|cjU7Y1S+yJBs&Tz@ zU&JkcLn9HjlZJe1Pd_X5?5*rp+0l%Fr`M}>2wRdDa%hR{DKxggKz0nTd*|f2aCgM^ zBwCVCqMc*9$U1Qg?^pb-`u=`^4g<~hq`c#H&?8r#&r-B|W|_O2gF1sYaj-a5?R#?# z2}JZqV^SOo9dfn&*k)5N5)uX%E;cwG<x~KmiBVW2{(y53H1y+M zh@d0p$&MJ+_Tl@A(o&RC*px1Msi{G0E%3KQvfgR(hN zV}{ERO+@;D7rR7MLk!#}nn&`q1YZx2+awG}dpv5cVZ8SFTm`MYGb6@bR&?;pwkJq>fY`f=3Kb^Xhs+l+*Zlex{1hClZ1#z zuGwVHi}H-1-3q`cn7GpL3C=U3H$#LQoo|evyLz@~_+TqDasfKCcJ&J4k7;2?hge`{ z7{b{LXU4gT)Df<0AsNN$rZ#0oSk)}dcSLPG;#rMJcq5Q>0F?E>F)PklBhLXIXpZ;U zI(6+auUjk`7+b*VIlOJCMvip^t5q+Ygsx;tJmOGN|sgb^_8&8Z&5tgX(-pL zHrPaPllU0-d~?RoqO7)Pq3%bL1HJ2aAmhPDv7=Yy_L!`g>$H}ywN+ohDygd4Ya1BH zqZGag=wx#BTc3fXu7K=3KswD; zi*~N_{_iBG`3@aj9TiV4aW6r}XUkGzix(otP69`BUbz4l^$_c5epY5Ho0``o=Gjtv zRj!C&PF$xP2>qGH3JgriNO>wdU}tv%mHF6C-L$pXXQEye#8VF}A=uOP?{_k6!yc&^e|(N_a3dYG_uWo2@RuplSG9 zKiB8u+0&9Wxzv|PSdB1NdbvgBZn)m_Sin!98wPW66Hk z{a)W&onuRRAN~88YYzXN{L2WDj*b@e&1SO(PnI$Wyq#pA`4pIpam!^RUK&y6W3jVx z0R9W=tLmJn2>9myOqBryV=5mysWS)FVfckOD)2CZ(4XP31o`>N+RmfYZ{kX}vGRSn z7C{7O;(lCD-e*?_(!2?K3!=gsosFILCgP^xNYs$QsXoeEw^X=%_`@!-7tvNS;xBxA z{X*sX6IbXkwXG}t#7*vV^>^Ek@ zaB+fAWJq{z&g+w!tN~Q;%(Bn>xAC+f6v(+S>HjOkaFgYN3jDR0UG2jw_Cv~^Et?+cPZA371ixM3Ap;-h6~*D!**$iO%=Z+u{=-?JoD+iXt;ztw$peI@Du_r1{T4jTYA9%AKyxEcl9L`E?g#f2Lji_;flpLeq@ zcV|Xj%dE_}-gi3s_1%ed$d|R4K8AqrOlRrLwN5)a0?Tzz=z;4q>hO*&X^1s4mZ*!X zQW&$@ieFhnW{1y2kHOxC)dCyO7pXu7rr{O&5Q{f!81lolF6RX^P)TrFhzrjO|N8B_ z;2Fe}%bvA!9Pj-RAZM;t`pJ73#p+#!hMumyIzwWB9x=r8Y z^%XXKANC52Tr z@uR(?K7CLquk({ubG!wONsl&_*Yv&HCFT(?`$^2hCCBendWgbyld=y=U;nMKohZ^% z54+w$Cez;)DtCJN7nUR}a+Y>^Ojicyj(q70n5xDX4M(~gA8vMSt}tPfP%qS`MvLrC zydLlIbS&&Ji)uR{Ib%~yXt**KOx7jzJnUvN=GUA5@>V_<8}H1V+B%|b3+fcCiOAY( zpS{j+5RRLTla_w-vqSY4Nr!&4(Gw(iH?{BHm^VeY(njM1;gu3^*O=4TVSk3VS(A%; z>C5?!nTBaQ_2%pR@o1gWI_R6yMQP*6_zS&sdpmQ}?O4{0B2w54-FROHclU#M@mdurn1XJp^ zCE2Z`s&Hb;!abUo^PqDDU)^{z5nOLvTAHZtHf>14L zoZwa@ENc&*l*rX7ouZ9gU-8C}ix+MEu(Smze+s?FIppx_|;W~Ovij3*neQfMhLCJ+L|b~7XL*P#YEg(U)rYxW)ZvThRmTU z@-jL{^@H#Irb6XJf9>Bb1@@g=H<6+Pdn-xNYdy=o zZ3Oy+ZxjDRpOQ(u6Y(qjENsln=(I<|#68_w-rPW>Fjur|_fNKH*MAz}c0_1m)K8=D zpGxirj}PJez{qDp@s8V$v4*R0C?=-SGa#!Vo5%AJOUFYEPbX>-qYT^K6zMe6KUb}p zN8)SZblQ#T#vG-Y;wHyDdyIF^i92;j=^A51bRPpY^V9wb0#{*(sIvJWerPyg#(y zEuDs^q9n3jh<2I%FkQ@9y$dAm9SyoFmTDqRNCtGA7ZlCttJoVyKKZS^=Ov_;zurB#tQF?cGVIhA6jrn1T15xWr7Z_X z`CFhkn6X=&v+v{Fq^aQx@C}l@OMORBddo&VdMB;P%t9L?(3>oEx}9gABD90=2@1oW z?W+`?@nphw0m=`ai2zTo8UE8oKMz6ujD{5RnD_QMT^a5j)N{Qqb1q*Safi4eSDUfP zrg?r{%A)ADLKEut(vCr}E-WGwQC^7fGi&D-(9(>4T;GK(h6Q@$EAQ{R{f+Tk(xpm? zrC=HJ4yNi(QGv`=@t9xLRVGA_?sP+#u9!m_eXKM6dl}5Sml`416O&^ct0t*&Z_Rd! z!Mgw|V5K(m7|0t28z11AW6`{DVz-J}mD7lUFsi`*ks8O5{aGy?S-p5F(XQ+icxu$y zD3CNVnHV8bHp#4ZnnKbi;-nPtWTxwng@M?&>ZoWULU<{&N~(RXtvCucJB|m6_mpH(f&MQ9NWIzo}!->kUO}% zPiPG0&$@eV7O+fOf6eZ)DSNBX_6NWC58z1#Rv9SEj@pjd;zXND zt+q>=e|8>|8&OOh3xPL+8%p~*z8$RccG}u4xq01gR+%6-2f^9TC8Gx3MV%8(x&&6i zHRdC%q3V+X`1N&&dQA9wnQmivO@uqb3rBPvhjG7g>G%AxGOFFCGd5%8_t>mcB!;u8 zag2!(U}Z5=0^~Kc+i#gH#6ppzFWU|4nFZ9FBZFRwcuLhQ56Rmgg1g!5XtTQ*kP+g5Noq!ue8+T7G$W z1Gi!-JBd?}T}}7N<_@NQK(W@Z3}y`c<6G;u-)}kgHNQ?IkGDObucF)?k_&t}Qu!3@ z+VCcNQ!uUb6$1yDn#YlzhXkX~M84oBM>=dkTSQPK{N>r20rlxtg?=?Qdv6qNzJ%L|xl#9l9uY-I% zT*e}(^9r#g{dwL@qgdqLWyk!H$$;|zq61B%ox{0cvSIe(DVR;m(n-}cD60T1!;iiz z(KQU#@sBzhzS@GjXKv0o-s}GOvq@Zezsbv$bTv?*%LOC5flpv9=XK(eC2arMmx)vA zQmL=3AnMoglzN@I;E_FDH^J=D3-QZ0bI%!7?|ly@5562qKccHaC1_FqEw|`cN?>g@ z+R6YnnOHU8$D=59CPnB#+>gv-cl@P&)@BKl7(zrPl!IhxX^p)HFdj}}=aZ_^%d2%G zd3(1FX&$C?SeV=9)9rfjD-~;p!~o;b6!wl0=l-PmVS7(5Gq&jJD0||Nwf2N$*DzQk z^pJ0Q$#0hgPZhnh1``*sK)#w!6Zc_l+U7lLbNToZaG;@`hLM8oFKT~nB@fYKdqjsy zxMl8sl0kzb@^{9L_IA5d~n3!$%iJ*JHX;ut9TiPG!_8{nC=I6@9k|=aueo4 z2&|T?E}Xq!`TX?EDB!VcBQm-DzR$C>iQAMvvH}p7U%DoeqBi1+Vf6D4TqT>5^@04F z|J~GXmAA6^m8J)YTOo{MEDN6gaMRvHc{3T_-`7S4agoOsf8J`+HGBuqO#oZmmD6<3 z*`G?+=RSeh7ucIpvVyE1j48%c6+*V3H7?DNRSKL4cFD*TP$AMgdXtiiu~{Lqy(G=! zx#5u91VUo4R!>y4OD+bJ=tc}r)bkwmv8WZva{~jb)eXkhc%Nc=>t;SgMt}tSX+~?W zq|7Snm&fkm_>Iy#UR>FQol0cF43Q6e~Z?PxF36JG}_sl zTMxUMr4MGp_c%u?Qj}Y?&H@=9J_A76{gw6SeLYBdC-wJ_aj=k1Eo!a|SZ%i<-s61F z2*Q3dLiK?)t4#e3|47xEwteK)&E2{H$kLOp46ePp;-~j5p(hg(Ej&x@oP;U1R;rcR z*{QqZ8*13oS=UH@`*9q-+}M2hsUV9otm}b#eh9>nX=6GQG&6xk3?BwY`@us-P_hr{ z4efGnUwiiALh$X}cMR{_@qeo(?F#}N^gy|WuI*h)oD2{-cNS3#{tMw>u&7pY{Bnk0+u#>6{KCZlKhfY%FqrKB6-<7G(f?xtA%J>L=VuRK TwBLft1TL9hHLLl@Bl&*;O}ei7 literal 10134 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 From 9770a0b23d0814b775f46809b4abc42de4294a39 Mon Sep 17 00:00:00 2001 From: dprevoznik <58714078+dprevoznik@users.noreply.github.com> Date: Fri, 9 Oct 2026 19:46:09 +0000 Subject: [PATCH 5/7] Clarify full parallel task cookbook --- browsers/parallel-task-execution.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/browsers/parallel-task-execution.mdx b/browsers/parallel-task-execution.mdx index c7ac2d15..f9619410 100644 --- a/browsers/parallel-task-execution.mdx +++ b/browsers/parallel-task-execution.mdx @@ -6,6 +6,8 @@ description: "Execute multiple tasks in parallel on a single profiled browser se Use one profiled browser when several tasks need the same browser identity at the same time. Give each task a named [Playwright executor](/browsers/playwright-execution#executors), so each task gets its own tab while tasks on different executors run concurrently. +This guide is a concise overview of the full, runnable [parallel profile Playwright executors cookbook](https://github.com/kernel/cookbooks/pull/10), which this pattern is based on. + This pattern is useful when the browser must save changes to a profile. All task tabs share the browser's cookies and persistent origin storage, and the browser writes the complete profile once when the run ends. If tasks only read profile state, use a separate read-only browser for each task instead; see [Sharing and concurrency](/browsers/profiles/concurrency). ## How it works @@ -112,4 +114,4 @@ asyncio.run(main()) One task failing doesn't need to stop the other tasks, but the run must still clean up every executor and the browser. Publish task results as they finish when callers need progress before the full run completes. -For a complete worker pool with bounded concurrency, lane reuse, result publishing, and fault-tolerant cleanup, see the [parallel profile Playwright executors cookbook](https://github.com/kernel/cookbooks/pull/10). +For the full cookbook—including bounded concurrency, lane reuse, result publishing, and fault-tolerant cleanup—see the [parallel profile Playwright executors cookbook](https://github.com/kernel/cookbooks/pull/10). From 28bc2441f6089dd6487c2e769bdda34254f3c195 Mon Sep 17 00:00:00 2001 From: dprevoznik <58714078+dprevoznik@users.noreply.github.com> Date: Fri, 9 Oct 2026 19:51:15 +0000 Subject: [PATCH 6/7] Show shared profile and parallel tabs --- images/cookbooks/parallel-task-execution.png | Bin 10134 -> 13976 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/cookbooks/parallel-task-execution.png b/images/cookbooks/parallel-task-execution.png index 5746841c53fe75b6653819a2b9c5bf32c5de7084..b9d3bc5cef7d08a9e752fdf9a8506f1c52b51e30 100644 GIT binary patch literal 13976 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 E0N}T4H2?qr literal 10134 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 From 96937a1d2bab2ab6d3287465c4bc0b16b16d309d Mon Sep 17 00:00:00 2001 From: Anna Wang Date: Fri, 9 Oct 2026 18:06:31 -0700 Subject: [PATCH 7/7] Apply batched suggestions from code review Co-authored-by: Anna Wang --- browsers/parallel-task-execution.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/browsers/parallel-task-execution.mdx b/browsers/parallel-task-execution.mdx index f9619410..811a70b6 100644 --- a/browsers/parallel-task-execution.mdx +++ b/browsers/parallel-task-execution.mdx @@ -8,13 +8,13 @@ Use one profiled browser when several tasks need the same browser identity at th This guide is a concise overview of the full, runnable [parallel profile Playwright executors cookbook](https://github.com/kernel/cookbooks/pull/10), which this pattern is based on. -This pattern is useful when the browser must save changes to a profile. All task tabs share the browser's cookies and persistent origin storage, and the browser writes the complete profile once when the run ends. If tasks only read profile state, use a separate read-only browser for each task instead; see [Sharing and concurrency](/browsers/profiles/concurrency). +This pattern is particularly useful when the browser must save changes to a profile. All task tabs share the browser's cookies and persistent origin storage, and the browser writes the complete profile once when the run ends. If tasks only read profile state, you can use a separate read-only browser for each task instead; see [Sharing and concurrency](/browsers/profiles/concurrency). ## How it works -1. Start one browser with the shared profile and `save_changes: true`. Use `start_url` when you want to replace tabs restored from an earlier run. -2. Bound the number of active tasks. A browser supports up to eight named executors, and memory, CPU, site behavior, or model limits can become constraints first. -3. Assign each task an executor name such as `lane-1` or `lane-2`. Send every Playwright call for that task to the same executor so its `page` remains bound to one tab. +1. Start one browser with the shared profile and `save_changes: true`. Use `start_url` when you want to replace a tab restored from an earlier run. +2. Bound the number of active tasks. A browser supports up to eight named executors, and memory, CPU, site behavior, or model limits can become constraints. +3. Assign each task an executor name such as `lane-1` or `lane-2`. Send every Playwright call for each task to the same executor so its `page` remains bound to one tab. 4. Keep each task's work in its executor-owned tab. Browser state persists between calls, but local JavaScript variables do not. 5. Delete an executor and close its tab before reusing its name for another task. Delete the browser after all tasks finish so the profile is saved.