From 72f75b77a6c7eb34118b6d888f1a0a20c0bf6c65 Mon Sep 17 00:00:00 2001 From: Thomas Nagy Date: Sun, 8 Jan 2012 15:28:22 +0100 Subject: [PATCH] docs --- docs/book/examples/tasks_weak2/wscript | 9 +++---- docs/book/pics/tasks_nosort.png | Bin 0 -> 20331 bytes docs/book/pics/tasks_pseudo_after.png | Bin 0 -> 11420 bytes docs/book/pics/tasks_pseudo_before.png | Bin 0 -> 11478 bytes docs/book/pics/tasks_sort.png | Bin 0 -> 18355 bytes docs/book/tasks.txt | 34 +++++++++++++++++++++++++ 6 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 docs/book/pics/tasks_nosort.png create mode 100644 docs/book/pics/tasks_pseudo_after.png create mode 100644 docs/book/pics/tasks_pseudo_before.png create mode 100644 docs/book/pics/tasks_sort.png diff --git a/docs/book/examples/tasks_weak2/wscript b/docs/book/examples/tasks_weak2/wscript index 135f959e..aa744b5c 100644 --- a/docs/book/examples/tasks_weak2/wscript +++ b/docs/book/examples/tasks_weak2/wscript @@ -19,13 +19,14 @@ def build(ctx): ctx(rule='sleep 0.1', color='GREEN', name='green', always=True) ctx(rule='sleep 6', color='RED', name='red', after='blue') + from waflib import Task, Runner old = Task.set_file_constraints -def meth(lst): +def bluefirst(lst): lst.sort(cmp=lambda x, y: cmp(x.__class__.__name__, y.__class__.__name__)) old(lst) -Task.set_file_constraints = meth +Task.set_file_constraints = bluefirst def get_out(self): tsk = self.prev_get_out() @@ -40,10 +41,6 @@ def get_out(self): lst.reverse() return reds self.outstanding = remove_red(self.outstanding) + remove_red(self.frozen) + self.outstanding - #remove_red(self.outstanding) - #remove_red(self.frozen) - #for x in reds: - # self.outstanding.insert(0, x) return tsk Runner.Parallel.prev_get_out = Runner.Parallel.get_out Runner.Parallel.get_out = get_out diff --git a/docs/book/pics/tasks_nosort.png b/docs/book/pics/tasks_nosort.png new file mode 100644 index 0000000000000000000000000000000000000000..c0af275b3c0091c1667e1dba3d325f36e161e692 GIT binary patch literal 20331 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 Md7N;sbqh`ZADck~CjbBd literal 0 HcmV?d00001 diff --git a/docs/book/pics/tasks_pseudo_after.png b/docs/book/pics/tasks_pseudo_after.png new file mode 100644 index 0000000000000000000000000000000000000000..b451479fb4d3d50d573f9fed07d57c3c09f7ad02 GIT binary patch literal 11420 zcmdUV2UJtpzcmgsIyyFrf>b9`MT!j4%Qz+)M5zjb6j6}gdkdnYgd!L~8Key$AW|Yo zZ&3jO5s?~Nh=8F(448zF_U^sNtoQzFy|><5>-*OGz73k(gnQ4u=bp3o{_S()OpPxb z*e9}&hll5YArfxR!^0~DyiYy68~9(jWtR}}viqjd1vnSN-fQ$p;FG<+Nb3OL6$$-2 z-|eB#!=r#UgrB_x^9-q@D zy>TO_>2wvotsXVgscrKq`r`ge`RBmuwXOZavtr5Wt6fF{`O|tj_I41~?e%-&s4Q;W< z;uQu)Ks;Gn^^1b)7lu%s> z3=2a0L~Pr%ujVQKefR&!dxW$HF*RD_(fl!81c#L3kAqj&c|0SRIx(5Zo|08FqVnxm zW1i}=O2w#(FAx$5Oihu8=L`Bn4Ti#VE{NbLYq2L3(>V~mmaSiu{ zpH*@Jewi8`wKS_g?jPJl@UBY`6apbTWzV+lUkudFR^o8PO1B>3sa9-VGs$7{p%VR% zuCtgG%K31%IF@WSD}IO?fMDm`1g>TGxfy?f7VhpJVtzk<7-#RsZq=BYR~YkOVw$ld z`@;zmi@;GPpX!9HO*RD7)cpeVf5vJq_nE1{i9`DJQA{J{I6)z+D_5+Fo5F<^V(#?K z`^VWX1Zw9-+dq5uZELw^f7!M2J%?<{VUHizO`2PmutRI#(5GGsQHLk6{pi=Xc?Q`jaQBmcJQBg3N!RkesRP>mx*V8947>-fw zA*utvJa+T_`ue_A>Z=K&_RYG4FY|cfqg<@s+CgR$S#t%3=twv!2&7a0#uRlIpKH}~c&W?(?t z=whmCIsx@DWKna9?D1q>`OGC)X$){$Z|RqP2fW@bFFqCLyjKIBXv8Vx*o zI~%iKQyxFgE_eQ1$sNF)sHBssoV%Nqz3!2l1(stIgk;B}QyZuD@6Xac16)CBYHn`o ziJR(uStX>XvB8b4Wj#IEU=bmBqS~!{2-~1#iIX-;aZ4X$Ohr`gYE(v<_3&g94Kx?% z2|xZIq|Lhvlb^p_fmgjTHWBc=1h~)5Hz}7%M_{|pc~?A%8Rd)CADs%DxGf+rZyjl2 zXgIT4(C@1$a-?$N`t{Xdpl84X2L0VP?qAk-^5*+od*}CfPQ!qUm;2JI_)8_tj5&G3 zW`~v9I%4evJl@E=vEBDJHfzcrLM5=BAp{;=|p10cQ!PUKK5qW563QSZZ1J zm;K{QO`It)4}AI)slkdbSR8>+xr}X-XyVwY*+rL+oVZYC3A8WjEvGol3DeiyH1O%r zw`y%xYv_9%V!-CqAP4DKq?B+X94?l0h%@brPJ1%-yqrsGVFx?pBG0}Vwh|I_<=R%- zWInx#XJ+~s&xQNcwQLx#=qlT1eF&2f3#Aj@?7|FGArda0iA%>O@ThQGaz6V9(!gH?5QwJr$N$#=dx}r$ZQSyGCK? zN;KIy`5u>*B}$oJxdIH+*Il=NBaL~E*I6;x#U@O)p_t3dnhte2pq+r*j(N!7;IlDL zbVPpOSV-l$w0*HJ8$9INUcpc8p27xgz=A zU6;RZxurm99{JIt=QJ+*N54Z^x_qLcL&43aU9)@d!xJC44!I&_QJG%qI0q?N9c2yK>k$nx92P5v^JRkMS63T;{?j3LYpn%GY9?=Rk*b}IluAhz zkCPgVHpxK~^3-pgcg#a~t2xI%aR_W8C@OY0<04yQcIBE#8IdVYi#6%5Ce|<0_-y+; zYgv(*iX8oZZQoh{R_+vXDqWu#H+y0U*P3i#Jg3WyWV7{wd*f|pX78=a#;4K8IHfIi z<>e>btd9FGT~Wo0-h1PuDh%Imt&jaxA%oLz?!^5NrY>?>Mv?bJH_hQOkvkpRZR-QW zn9A|!MqMtK3C)l~UGt+D^qga*39)dW^me$}%qIcPSYE!H}T)ZQb99 zwH7BBw#VGKRA!Q-$y{Vfsa(2*A~tkNjp1CWUYA@AOZSDZHL9SwU~$J_53e; z`FA!R`5_Up#6YweD=|C@GuaL#s0W==Y5x^6lgpk{QmCOv;Qc* z>cRiTCT^K>WdWtUcNUW%WWd>Mp~F{bt*yTZ@sp1W?z_)I@fGyDe&`)WeKwU7PJG<+ zam3u%Ob}rPhhdOXg8Zk2_di%!X(zp%zQ(SqN_>|k#+R)`b9k|w9`CR3P-bgyKeKuQ zZe-Fu?+`RXD*%>^fDiiwLK zyf8D{K+x0ku0s`XS*7*xf;>~TlQV%qbWJI^ZbIsQ7YN zukRq`CMU)A$xcmq>jb>>7N9Uzf^$vUNsXcXqybZ$$?T`$;mOJ2!WNX0RY-D=^b8%x ztRO1iRQWAYTaf^^HjNAjxOPsrd5VL=T1kocY3K9t zVe#{HcTjSt^9f4)KRX@!VHaj{^6ejrctnjIthd)@Tws4A;mzO3_U49( ziHh9JA+)gt*Ee!KuI*P?V+ip`Hu}w@>~d1LYh6&tm>0~3>7y$lq@8WNiqCXah^Kt7pXx-5|H@r7-* zJYP5%M#&$Pzu7gge83tek=(o1|0&vTt<^}0j@DOhvQ@%7AD9%oJo7^qi%K6T9Hrt{ zlg`6+?Xf03^YH|ZVLCx6zpIISGM~MnJGM-AnTh^2gCiRE=N}j}x-*KF*r~|B&)LOe z30Ir6p`M96e!S61-)eMhY)CXJSV-jwIh=YQ>(D;`j1Sa^1Aoa%FCQ z`}=bH>?)ZaiqOqj^HyYsEKscg!(PqO>6~7W=%?=~F4(v`i1|QosZdHcf@3WNTa1~^ zf$5dCU`<3If!tcUJc45P_AD=U_XxN_FwA!pxMU3?19=%jqX#b!&sRpVg?`Y=XyvWW zq_{E%?uWr;e8OM7!@t$+XW5j;9<&DiYfrkBrMrP|G?$pkWFp@8;HsZB>r!Y-zei{W zmMDwy%PTS7)^te6^-#a5iLWg3$tycl*Eid?yQ*byhJTM}w!3_}GMEq4?EdBnQC6N?0yW_*^fC-M?>TclDZF3ea|ubmahn zx)rmggju{=H>KWkv3+%IEx1V_eIxv179||CKlOR_a4F$H&AVq6Ngs3R;qdj|SGP%- z2tjFnGfoGtefJ*YTnVwm@+T`w6;6)mf7Mj+T^R)?IHF^wNC}OoYbxzoJ-Rn`&z?3%z-lr! z5)uT`U)fy0UT(>kTJpThiC*h>?a#52y@NsT5m!)V7l~Fl>jr#WD?hlx^Z^y^qzHQg>ZMtqV=?z%Q@$r1A z-G8xLlgC-DPVYNVCgKl;_xGb|{=wJHDhV?Gn3dYGGSWwZx~7*moL0BKwmFR-*%#IV zRB3ACE)UNGV%VU+C8z#-G-zI642DJV+`O!k%c~=TqnaPy1d;+&n<3ETv0aOh&L5L2@#uMc0Xins7WmT{7xAzB&+_1U! zc$eX2c+q8tDyQ+lRnk`3!HC?eP8Ufj(iSPmzpW$ej6JZljWQYZ-8Y`MRGznF5q(~D ztc`Z}cJ~h3e{?-1*QJqg?Ua75>*jq)pl|LBRoVmuq-Ml{8d=aL^8c%*{?DDkgFKUZ zTY{ZZIyzr?e|$>lo?SS+z}IaljHU51c@GvF03&pQFgP2W06)RY+mA-;mlmAMEzCom zP51)=sJ-XKH#hQi2&Q<5=Z5|Lxfqs++D9raRulh^##eh}(_LF9P?@ zN{P`JZ>QTych6##g)g<*?ZQpyrG$p+sb^|r1T&b-C=_3dg3bjpzge2=6(fWF51Mms zxJt1<&0a2&e7C$9C>@Z)wf^W*$BZ2B32TXpvd1E~xuX01(n8n3C$gSI>F_LH9NfR^ z1RozpH}%ODX`UIi3x~XZ9ZVX0z?9}r|3*Ce2Qq;N=0Ng)&{$fMfxX0U+ZL=P_C0zFrXGO~Ihc6K<&jp^AA5ArKD)P@gx*xqDLrt^ToxH=1AW z{(r*;CjCk{A}o&uLl(q11an+;LdVU@Yw$}lsohQ&Lp*l8>+dHokN+6=R5MIA-Sz0W;VX@)(AkF? zQ-|H4eU50MSeumDPK0r;e$>`CH_QdesBirjB*k%CD?lbR|1ldDdq`YAaPtw;0z_&T z^r4RIb{y6P@O!Q2SjyVMPOqt`N+AbUD4mkgEJ`Qh1%#Po_xzbU9DCI#nmIu!?aR@N zpskFZSZ_}?(Pgx!Qgo0PA;5vm$bmH@ggYF@Af-E?7^J`phrXZu9Zbfzgld!EAPDIO z1|B12)~{~I1wz{o9io8w4*)UOo2lV5)x5b8pD!2BpL^E`yw}h0JAIxicy7{dWD0~n zYhy`V+J-a-A|9F(5sc*)2yN-u3J^!Nz%za2f_Mu=fMQ4EAlIKGXT}9%RuDH-VP{ir zLrsPSu#EYrW>K7+h_#0KoQP^N7Il_=ck3rg$;+XRAsuZH@DZ#74#nP@?(rFY>Dcz* z0Bm`r{Cb^tHb4m=A}coqWR0^l{r+$oet%WLs{B&Ox9ygIsdkKC$}PA@v2N18M-leR z(Nou6-iYa9F*fG=awT(bE(3G{az+i=2ft?56ta4BjJw3KqT^1QLu#v370Fm9^`s|E zqL{07L=^KYNyBTr+HFteGLJ7y9MnwcQ53 z3_yUbf4(rxoW9#t>vc%imrj6DAuM_;?py@25S$M9QPbi( z7tj0`6Yn3oc#W+5zt0_=kJk1jrh%-`0)ys-R|ydZvcf4C$O@{3O&~i%IR041>n{9q z;$#FlppOuNMUUBDbyiPC;k-kv(kB$xhb)NfH4BrtAv}oUf8DWA=6rm-yGKI&z<)&q zQip&35vW)Wh^l*zzC8O3qJv9LOG70V#l}a*Ad;AX1F~RT+|=B>#Yz&_30@ifRrS`p z#ACnRMlS%D!THVQ3>Z3_Vcvl_kAcX}28g@>m}4M@XtHbvlkS|J)@T(=MU{5pnr&q1`9e&puY={6V} z0?dIuZiS-_W8+x!TU=Xi?($%i<<4Eo_@g-TB;kmmr4fjPE;b#<*<#a+y$|rm78JBi z9}ZioobZlVsjR&IEDB|?-eGl=FicYVnC&E;cO7{l+>QD7YNjWvakr&=Nq6^%NV4~PPYP2$dZCl(swkW8mx0toTkD);A&5Zaj~5Ftr$ zf~W_NoaxUu7f@OfmpxZJckyc2@TYe4duZ*04_fPZ$JO0Ao~nR_XJPlZ#ld2eT&012 z5Ppp1RS0qP-zG(*Po9bKhd8b;{?F}&4v6J+`|~*2OaG|YB{)FqPSmC0QY-Ay1}=w5 z#&J2D;?he6TP)X-gx6Sr!w8K*-zN`H;{yKX9bVtM#vi0H3kQksCv+zcEnhqEMb?1P zZGu`Cz>uT4Od^*RQN7$A;!rq^oIGh7OQs8iWjPx7jO>Sg-qB|2^mE%DSqdTp}~_R z4FKiy!}vtbiV`>9X;hmu{Pg`GJp7r}d-)-cFl(V-_!Qy+3ZlL9{kFKATK{zJklwdX z=V0Kn%Fk$4=Q#HoQ_=&`>bojb!G2oJ zDv4l3eVQrnM12ymtA2R95JC{%4)zejVuke1j=9RIw1fWyaCa~R#ZCX@W<0YG|Iejs z=Nc7M%mKr=OpULu0a1wJf&;q}{TJwr($+?H+P!n-DbPP>PFF>9P~ql26O`^XpyTO;KQ7@Cs;Ojb#Bf&X-%PIIweFw>$=9kXPJqw%_aqR^^OCymr2L z?ezLT);)#-K^IFQf~!2|1QFba!~MYQVY__12#%G4@0|vN&bkIx2muCKpr+t*bSFr0 z>5|_wK4xnOkq(5Q$nBJ%3u4sllT}enAWE+*))Cn`jYMToY`=72PFzSri|K`bTj(#K z{E2o491*ZwCa4v;@HMY37QXFz;n0VZT0l4hWQK6S5mh<&Jn5lxyG|tQu6Lb)N#-&( zKXkhMGwOgK0=S|}PFxO~Nhh0x2<|j1?4XUv$m;R0s|JCtu8CqVJ8;97Mvl9ABoO=@ zD_14}mKs$YsF*tI&w;c*;X{^Iz}$z7bRQQ$uZ|{k0W3scBPjR}U$wFe8oo-wms^$& zyC1Qx_nm%w|Cd>&g$vilD^)9TKp zw}RK*ilz)z#r_k@G0W%ZUAYS4F){)KlY}j`2--P^M~28pmwX{fbiCKq7z8>e+3h9b zqYjbm_BhZv9sW)^%F4Lgy-&}0jG#Rs^6sVRTpa3@WPRRau=(cD0O8_JkG~Vzo3ht? zu;_B8x)*-~XoH$Jj4=;D>;{4f0DoY%4c!_aB|K+&-^|M*XiU1}MKqb-;L>wAOg(p@^ z406C#_`q9rxs_Ag`Kv`WLZ`Fn-Ogp$2!W381NFOYX`j%rTov=i`Ls|+uKTn|SNW6P zKUS~;7BxYj1tFlfZB>FUeKMd=kDi4Fc||HZt8an(l`f zRN3K%*(9B{`q`w-ja;GqzdP#o6Vbfq*J2G=(}$ur&tZfdA}Jk04vDf7{L;tGy`agf zD9{kNI8bPmJ`eA(@3g0o#2K5Ja@@*VnvW940)5h5n-l78bNZJa@JZQ2{ zVJ6k4JykRD{`3qZEFr)W#1ka=ltbI1QFTe~z3t*~;wyCl!eQ%b*ZzD&0=x{I-Yt<$ zm$agJc#a47?E(8hO@C{lAX$G4>2$*v_%U^YyuY%Lbt80Hvlc$t+CiY9jH4GDpH}@| zO*ujHI^n~1g$CQUH1tuj%L31cZ?x>wD(U_^SvJYvc_R^T!H(Fj<_vB70NWdaV-m=4 zs4#i+1CX}^u*JLwaS;R7enbwf4zU};1EK>&5$Rn(X$xq*aPAL9wID3NyxAie`Sr~n z1Pg^Dk|m?K$3E`x)TC+jIraf6h4!8DC=RwJ-|Dwd_7#lCn$y5BdVPQdQ`Px>nmkMk z0;MEq$f3UY1+Ii@zfFON58xvjNr!}sx0*f5O{)CF+{Dg{&@oTt*ownLyVy-@jms5H zYa%Ee=#i5d3+o1OFzc~sc!y{<74KjWIiq`(eH!xDd|=A5+^K(7b&|7fAZhKLR>Wd3 zlG%7@rw2?_8C`$_Z=|3PT#>)%$+NJIk7o2ZaMsgtSJFn6U1N!T9@rMzxCd7LB9vJ_ z%>Qn5d>ytu^%>_wC4t<-#5zm6kTwtn~X z#dJfzetvT=p5I8WgKO!KEWQ5$k-P1;MU{(dHPk;nm-B$ix|;kl`<8IP(Y4_4_ zbIFaOjk)ALB+JrzZX*~Yb*ky_A^WUF36Ic~ zNbdZNGp~2m?~?k#f`?6(0_C_u8%O|}^4s~(P=XIoO98gD!fidyhs?+`ITKw}HFyaAWd7tPuD%4=3K-giwF z>1`7^IFos_bNRGb5D(2rBWkfonV`nvY*+8GL=(>!M-kh(&7eIuZzyJN+rRgBx;*bl z5K^{pzGlV&m4lKTeW{fNPw-etC&&9!X236Hh&dQq-Dv)&Zb=`_6ME#5_*+$e!d{a# zPhHtwWzY8(gH9R8Ws_(7O7|uKB??%lSf-`hhc6bU+sDg>KQI@N-_}RLy?5YjKUdq% z9%M3|wb5t5Wo^X!_nyJq2K1h3lg$ShOZ6vk)m3G>1ozFM#(nt3)lz;RtatGgpURc( z94UX)6UhD4S*W3y%IV$t<~6yM#*fkXIlsNA+AMAK zih4YMW{RA>aa7{vVYRKz{g2Z@2w_dCWNd7Q9qOUYbcOd@)MY%@0V@a2S=2@*QSM?0 zgmvcS>L}0noc4)iYM9AYvDAlcuCo=x@MWJ{Bp{js^Qj{wq6nvany4Sp`7pe5s<+3- z9<{N)xlvhi^au$^x4?*NrjHoDTwXU7UYaka33$>NUcdzcvv$}|Bz!V2`Gj81Q{lMF z9Yu0bfj0feQXde(zjlIB_Zx2`*2d;@qSmZ2fR2D-B8>9lp_&nl?L?iPkK+IC$17ZA zW_S*1(Jn0M5E&msS~s#cZ@#OHG2sKB+M1a4yNW-GKJcZeRlM>?!|}JF8U63hsJ}eL zpQ$R}Dr0=gOm3&B++LOvFDb2S3`W3agQhNsb~+U*tQDM@@*7xMYa+KY*P0MCTrIbT zjg8xmZuy%|z`wLUq>E0Td@k(5D-Gp8GI^IF#*V2hwqwg1IWIJ2L}TIn9d@PNBgFH|5c4)J3zA$6m}7k?+N(_) z<8ysRps)Uef(NEzE|)cLkc`b!&ALME4D68ar`+7Dg@}`0nenIsuH-ZK0{B?MrEAH+ zV*YHhK~Cu39-2!t<4dS3+w-MWd#hvEq9%7b$7;UWs`!ban)F9srWsz!bUAOtqdr{5 zX41NJx)xZ`=}wV05+r?3)n+XS&-cFEb_{Kjf`w4(?Z3h=<=#{Zg`9%UV0b`VH9}!% zas2oR9~_%D;bWEdT{5fyswd7;!`8cHb0gOc5e?H1M7`^$AN2G9%5=b`tS{ol%wL{j z=S4%xWo)8FJ+=!$%AdnfJV?-H(YCpMF!yA9KUgEj;g4Rt8hyzs>w!*=NF9(-f@v45g`Y9Q6PLx?B4JTJ~gZ7mk(Cdq0J#heLBq5%~W5c()kUgKSX zFknL&$6D`E#);*MI%M-kKjUr3aj4j6paSWPHY+=*`y$$aI%Hv@M;-b~vN-c{9Eub2 zI>kdK`MAz4+H`IW-acZr2LBH4D_r_x_b1I#wiJ}i>Y(&o(APZsmDPtcyS8hr6IEbo)f7_P1SU7U*SLQ;N|1wc024p-$7+G)f#BwJlH}&u#5Ih#{g%= zAb&TW+isrD+RDnxw|u;Ol|vkFD?9nz3Q)f3**Yz9OxL}5#SKw?C7DY b?Bnm`?5_kIVt$V=RKXY`jNui3+_?L1S3z?I literal 0 HcmV?d00001 diff --git a/docs/book/pics/tasks_pseudo_before.png b/docs/book/pics/tasks_pseudo_before.png new file mode 100644 index 0000000000000000000000000000000000000000..3a8e3db100927266b69d8e1f105017ed2fa33ecb GIT binary patch literal 11478 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 literal 0 HcmV?d00001 diff --git a/docs/book/pics/tasks_sort.png b/docs/book/pics/tasks_sort.png new file mode 100644 index 0000000000000000000000000000000000000000..12ba20f3002c17739a6273de7557ea1001903099 GIT binary patch literal 18355 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 literal 0 HcmV?d00001 diff --git a/docs/book/tasks.txt b/docs/book/tasks.txt index 78d379f2..f4a419e6 100644 --- a/docs/book/tasks.txt +++ b/docs/book/tasks.txt @@ -240,6 +240,40 @@ Here is a representation of the effect: image::tasks_sort{PIC}["Slowest task first"{backend@docbook:,width=440:},align="center"] +==== Pseudo-sequential constraints + +Though the weak order constraints can schedule specific tasks to run as soon as possible, they do not affect tasks that are posponed. The tasks that are waiting on others can be executed at any time. On the following diagram, the task type *red* is waiting on the task type *blue*, but other tasks (*green*) get executed before: + +image::tasks_pseudo_before{PIC}["No particular order"{backend@docbook:,width=440:},align="center"] + +To force the execution of *red* be as soon as possible after *blue*, another constraint is added. It sorts the waiting tasks so that the *red* tasks are getting a higher priority + +// tasks_weak2 +[source,python] +--------------- +from waflib import Runner +def get_out(self): + tsk = self.prev_get_out() + if tsk.__class__.__name__ == 'blue': + def remove_red(lst): + reds = [] + lst.reverse() + for tsk in lst: + if tsk.__class__.__name__ == 'red': + lst.remove(tsk) + reds.append(tsk) + lst.reverse() + return reds + self.outstanding = remove_red(self.outstanding) + remove_red(self.frozen) + self.outstanding + return tsk +Runner.Parallel.prev_get_out = Runner.Parallel.get_out +Runner.Parallel.get_out = get_out +--------------- + +On the results, a few *green* tasks are still executed before the *red* ones because a certain amount tasks is already waiting to be processed by the consumer threads (*waflib.Task.GAP*). + +image::tasks_pseudo_after{PIC}["Additional constraints"{backend@docbook:,width=440:},align="center"] + === Dependencies ==== Task signatures