From 336caf6ddb0aae42f3733619f8d75de65740f737 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Wed, 21 May 2014 18:49:06 -0700 Subject: [PATCH] Add engine state diagram Add a nice visual representation of the states the action engine yields back while executing (which are available from its run_iter method) and give a brief overview of what these states mean and how they are used (in diagram and in text). Change-Id: Idc6abc83e0ed7510c0e4c58b7fcfc26cce3e98a2 --- doc/source/engines.rst | 4 ++- doc/source/img/engine_states.png | Bin 0 -> 24560 bytes doc/source/states.rst | 49 +++++++++++++++++++++++++------ 3 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 doc/source/img/engine_states.png diff --git a/doc/source/engines.rst b/doc/source/engines.rst index 2deb8fa1..6aac42e0 100644 --- a/doc/source/engines.rst +++ b/doc/source/engines.rst @@ -232,7 +232,9 @@ The graph (and helper objects) previously created are now used for guiding further execution. The flow is put into the ``RUNNING`` :doc:`state ` and a :py:class:`~taskflow.engines.action_engine.graph_action.FutureGraphAction` -object starts to take over and begins going through the stages listed below. +object starts to take over and begins going through the stages listed +below (for a more visual diagram/representation see +the :ref:`engine state diagram `). Resumption ^^^^^^^^^^ diff --git a/doc/source/img/engine_states.png b/doc/source/img/engine_states.png new file mode 100644 index 0000000000000000000000000000000000000000..b91041d2eab40cdac78869f6bda3aeb544155f90 GIT binary patch literal 24560 zcmdSBcT|+w7AIPmKoPJ+0m&IeNs=Thl%RlQ$r%MC=bThRAwdNJ0RhP(S#nlD5Xq9W zAUR8tTyK~5?R#%`zghF9>xSyRBk{G4RxZ}# zgtWAupD?E<=RD4(i(z7JiH#y+%{CLWBzjuWxbQe;#;77|xj&SB*k)dRxVQ*WJaXb% zSDhz^F*`oaO{C%lH*az>gO%MwJD1f}eucAmBQM-)k18ByM;yd{zOHW#bXaZuOlEun zu7?&`-h%_LzIP=#u$QSU@xS=;eo^sZj9lMcyBj~b_xLbmGQ&MowY$FMjHfAfcL`f_ z^*)4`4;AP%)X98wf3+*ys5lh6;-T53vtY=-MHo7`b)(QWcaod{F5&j+a=iboFPYK~ z$QW)84vr3yjn?Uw=wbHD=bjc96;*At3lp=*t7i4umye8&ieA0C^n^&PbKcRt_~eNb zug=_YWuv9N!5p!**q>KkK4><NOJs*>e=l+hU2KsAsFJI-|$J?tJC8M$!AKPzjoCsRd5S((gu(ugDssVO3` zxqaorQ##3jY|X;Pd}DUYA=|lOf?g?R$&ABg8=r{g`?dR{tDD=;C8BSI*iAMBp?Gb-eK?6vlC4#2-u_z9yf_wZ()y}vXoxM> zssW8mmpGq5&TVvJoCUMjUwc+ouhO~AEMxv&yE=VDGlx!@L5*M|S(9CyfX&PzrKr2( z{rgkh3gXL4OL8b`YU*+CeXB~{Ar2KuXK~4gZXFiIL*)*$=at55yz1-fyf@;;o2(yST+24hdB4&L>VSEv;7GCbHpT3sNM( zrE60MyBl@w0RaK8UXjtSudlz$&E+3Iy}S^n)3BbPUuZ&rJcQ-P-s=3qH*da?*6y4{ zdaXCJz>0O;8j7co3N9`wIr{O;XKMVwQAk%hZpD$q=rH2uJ9BMq?ftDqQ&ZFafdSSf z5zieiq(6$ow&l`*}{KMDTAb zb@AdwYisLkF-w)JHN>m4EW0l+t2AITg82COPM$o8>=ItBGG?p8b{Ax7JXOg_m&DfgoYe59FU8NXV0tcZ+0sXcg=Ta_={dq z%cf24%~B`s8Z0#3+NQZ~dm}F(h?wQe{r6BLV2wI@d+%lSk_YtPE5DsbBXgyP$<*9C zTtlpkM9r+(;!}dC2iojw>K%!pu7QEM@844tS-lT_NUKQyxG8qH*=<4+Nz++we(`5+ zMP()Ni;0|5GkpB~|(r zTwPUFVmYX+sA%x6RUEV10lNcgm-uFI@rAv!MwY_-|>n&rJ`c5g|l|4#*F(V z5j{Rj5Yv<4q%&QF3vo{}e!;t+TGOXL;Qg-e$Pt?v}1$wr^=`ueFr z=|f9P)lAi3Qce=m{o(N=DU^DiUa_sNA9rI%ex^!Btc-!Aq-4BU1khB zp3#UWps(so7TSiiMi-^lrKdBO>sTB5_gq}0Z(U${;@6uX?vsF?X^p8Dzk2yHUGl)d zKwqC)v6kq=uZ-TcQYi(6g&uQBft!SwMSYA6ruyou@Nfx~Y%~Yo*}Sa2TN*a77aTFB zLo190p0@1SopnF^va_$2>#WSq!ZCB5ZKsl!mL?)1QsI2%=H_-lbqwy3yTVpjIh!5F z*S@}O_?YX9x|2>?^vZ0J407LEE|8M$@9%G88%Z*MPmV|#+AEXo~2$JI#fwW(CD;|-szQA1Z(H&M(>M@Q!@X=^1H z>HMhVL;n?w+;BW&6j84KMXe(rG0em0etn!(p%s%2GNZ8-``T0JW{c-nVCsxu4mC?;j zM{i8Lu*>~xgBE$!jY8p2T%JCCN=ZdEIy&0Y(n5gWGQAFKp}|SbW0M=-O;wIpm_7U8 z+F-t6{ncmPXR8_O!^;g#Is*wPm?N66UcRIIGMH;I;p|tn7X7Fiw+&`v%O8`U?8~dt z(*wA-+l5yfE;!wUYKlRAiZh zrk_|C`bSl%t-X8qPDDgxZ+rPlbPKc|r5~bOMhCOjQel*rYg)8NbU0sOTgcp@w6N!n z?NOWM=3G~)_2~KNB}LMrqN3NL9^21+4!+kDiOZn~2?@u2Fx5~d+ioo^E<&}wGD3AY z=CO+G0^FmC>ws+3FfyV?vTMF?$hU=CayFWvwW{1XEGBwrKRd=WefA#Py}-U(&{Q{= z*t7Fz`)|3b313Rh+1~2cXGu;?Weof7>E#87_rq#OTN@J`1C2(F`}Y}<)6>&IL{s8J zB^Lc0h8^NZKZvfC7>pH{<1JQW@AZZpd(7{9?QDkL?Px#OB{1%3T=b!d#zzjdy}fXR#$sTNE|~R?vGHtgMWf zeH(%A;r-?1Wz^=NY2u}vsl%V+7-(gCKUc@&Uy$1!9k|8IlTuP%U7By$oO`V&cxh$a z?=F(jdz1pRvrIu(;Qc_a!-KmJl+K+%;yfBA9z4o_zwH2Hl z9kX+CdiN=HqU#mK&It+JX+3N0(kkSwM&af2(A@lKNQkAG86H0V{^6?6c+i)x9} z-j&<7t(4ZAG#A9UFZiS+XNDU+6IsVYLf2Dp-?telyNOcCkiWQnmV#d{N%3W5#Uxbn3&XR z>1c_SHp{8c&ojwaGEDG25-_ekok^0r!$hBU@(yNga7iZTW1NsjvNgMv3~nUyM6vFTH*3F0n!&_Y80G&s0B>*?wh!&|XV z9Tj+aKMB$0g$?;!L^#Mlltr9Vlc5of7ET~I~;W^lc>%4j6~04E>cRxoFc z>+W>)ZldBmFAGbC%eYr`?WopOZtjAT5@*cOA%Mt7j~+2dg>;%1lXB{1zkTbvzg(&i zFVq{M-~2$Z#p5WabgaT_-`U*!U2QD}TC5l_8$cq7!Y*Oo%K+v&?d{J2Ru1?S8yj15 zxIL_0YQ4L&!^pxCj9VnxU2j%7DK*^N!Ymp6O2q9N=H!cmJDf_W1{DHx8f*_p&oN@e0+bgUo}+o9#d}%GU&940NsSj?nXzwqJ;WKoyRLr1|Q(x58=)62wr$Ki_qmo=KdYCH6zF=&Y-G6Cxm=(Y?_ilfPI-XO#sP9hNQ&x1AmH)cD= zfn2x83j+;%Cbnm$s(PWxP8k<|-buX1@Cc=h(MXnKZt3Xo*_jC34FrI9xc`%rjg6ew z?71qPQv?VehV=n=gs0c)Uwx>TLo^$nKafjj`J0m;x%u|;%gX{lDuScTISqssP- zQczi4Jvt#FSCREyR@TPGhJWEX8{#g94$+J*voI=QDHJ{_M~@lr!-o%1jsR}qwBzb% zYGx|3PJaJxVQzly+BNjsqN0~JSJ>FzB_%z|tIf`~TJ0LqJq4*e`DFCkqA@hzx)yoG5p4bb??llKdgPek5cxVXwHt*1LtuZ_y+(#zS z@EhXdwSeFzK1@yBZ^mph5+Slrm>j!J7@_EE!K?Pjhto8KPe7olv5`Zo=(g)SU`X}# zPcSdrfUU2LRWHuWI0N#8H=v0 z21EnU=VS&Tr=Z(q5~^BSWz{Ev-!~T`uG0(CXJeu_qrvG1s<}302YnsqfrJu2}vUcvvILRhdbj02j z9S)MLVBm*4>h(N$fS!~zT3ydAZPXMH-Ned@bu*n*5D_i{!F946&2I1F;`2RJV8|=# zd)b#SGO~o+GM?8#o4)+{meA_jL_H1;jA`dA9Vhs_o-ej9C#j=-FQK6NoN-b!gnw!fZDyo~LsH(0G7bM8a$|@l6 z6J!|JP{AbZ=NA%rOv9v7nm>Q0O|EoVz1DdC{Q2aR6j@nWIHQlBJb@iwVm-PrJ-xL% zo2ag)mLTHxwWH%1dL3%cnxEAV`Fi(|MrJ}i&+Eurw{G$A@}{PxA(b>WW4hG*mSOq) zC6F{U`YI~*iSiF0W|pOPsfAEK;FUjO4g2ngYEZRtas2GJu{`pqv&G} zV`IB;=F?cU2NbL8VOe>3{qv3>!^q3Ze#gIX;R0T*tt`s4BjG`a9i=qpkXzfw2eZCz zUvtC6Bpr%wVxqpXa(E}o-u^vPIoeQE%9t28FFN?Opo0`;+^!C=x0$IaUVi?P;^GGn z9?Vl2y}OtqeJM0T+>oMOH5NO|xpLm;!xA-s~nb zOOy6b-Q6mj{5(K&3g5qHmVbR6)M_|#+V<$ol-35f`LAi6ot;+0CB@obq12_n7IOMh zw}wF6kWprlR7)a0>>L>Q%;{uSJOtYh#SuMT>C!Pgyub6~yXPa2^`ZCZzD?A}N7_`D zm-qJdtqa4t+S}WoBBFl%`t?;_ySYxfz10f5CcBUV9@F;cAD{aFv1+9p$)wtq{bs=C zJ_VCrG8T#tyQ)pf?f$as`fdt2Ik~-q!~W*{2Jo_&1*?tYC=^@d7h9(j4%Du%PSXm? zN#OL|61tPo?H?FOBkY`=miDQ=T|QG4_Mgkg$0sTHEkAd3)IxEDZV5_+b$S3AjRxg1 zIx-T#-YqF9W@cuNe<)xID0z8#)XNtylDf>CS4JM*fm^(|8M7`>f987F_v`IrV|u_* zuTTPgUZ%F*WaY6F5)uj{<2E|n+v4WtHj!Bwtt>4m=~L|{4>bYMsX>K<$ans=ln#ga zHsdunpPXu*w)gSzIqG|!o}M0gMO{c(Sor#N6bhxPrgmnFA~(3Fudh8(eEj3bn>lJA zZx-d|=H}$E)6p4z`|!xV{NRN&wV?A78O=cY-8fid5Kp#O#}!UpAqm(b3%%P~=k#K4 zZ_n2k5h;`A@)>Gok9l!rlrV6^G4=hJji&M8V1(gCg9jO+9M541VZED z6n*DD9THa7a0S>((^ZC|aUKk6_d*7WV zX2v7JtVh>={-t_v5Xs8O>?j<+BwF(3&4;;FOiUA5@YAREwzhLR9}tL9oN_$h`x26p zocc8*Jv|NLBA^-TaERMYp1`ct`QwB7Lq|s^^~}l6&TTqU9X;0=O0lxCLQr}aNU%x)kLmmKkn!={) zCW^A@o|>B0fRU^$zKv=HZc4K$91BmIQ96Geg0DX6NciFW|mO!Mow6I`E z252XjAQHnF^ZGUAxpN@U%uY-cxNVr6*G-uqm9MI*+6fONqM4E1+udCrER@c>Rb3Yu z8L6bC6c!c+n-tsuGi&RaEVwc!Cnpf*vUfD<$=N3`YjFps_Y3@D$V zIcKI*kduc|ivm3VK07Oo^4aT7G%_-ZV%L^J+0^XLfTZ)uzpWwPeal>0x(U1)VkM9h zfWqghvMD5r9rmawcpdy`fwi-auU>tY@qk&?74jilDGJczBRr~t;R)rX5P=*BYK zodT5hXWANVsxTq{udk9KY^$SSIf$I`*sJ+jxisMSEezJFYfW&F2oIW zA)liINg~k;u;kR#98OmeYX%>VA(13sEdM9!=pV&3#2^Hqo#6HBx2e!+XU?2)|ESQp z6;_Dw4Ff7~fVy+1IY}~5Mn*>NVwv4{C~Y1tyrW)x+L8`GzvG;_h!8pfr4E6bWymsKt$T&1U7_;XvA7qH#ath3r(Mu zoo@skQwJ)@ty?Gclcr5&P=6_fo%=Xd|Bd05^z^J}SpP>{pLEX@q=JNm1SqH-;uudA zm54I-dg^Zc-f)hSu=2+nJBdo_>k2?TAeA8>Ey@1?!3p_9vC+=X=YM1LEY>T-HnqCY zAOZuWu@JfBKTvbTix)RhAa_Awlu26$j|?jI{QUeG|Ky5_Sn;RduhSt7LqMW4`rwNL zMHV!a{3*GADxXzlYcp+e;6npm19(G4O;9aQISE1ak&M}oeSShG_01dK@zvE;eLcN)8&eY#cMlJqM$jY0 z4%X_wefw5m+yv~rvZh8ak3UB(E+V4)mo*uM?U2yjpxB)8H(DL5hAu(b)Z5>`=qPmb z)@iX12{$9bmL4(&^0#lVZEayA5#WO6cF(uIe(2>@t;0b|s30r5v9)!Plv>2q76^Q; zuA<`e@NlCUR{A|SY-E5~=Il7C3?(m7H!)(aBbv|LUv&*gMk)#(0EvM<;9weDLXhBzi?k(cgD z{~LE9z$`?+1u;YNK&9(GPOy$3Pr#8+kqX6@04OI=G(-A8R4sP>F$rk} zNKRy=rmhL|k%tx*Zh+d8_3j;56lJy(5)(C{Jv}|TmCoRC!>xR}c=^hemiG1hL|!Bzad&rritp;~PC`n$F%0Gap!I?&R-Rn_+IE|%*;#yn$7^Rj ziq@$rDt*e#+N+in-HjT;tkb*f%wbbPiytR%HiBZp&CFJY5DR6d{BA@24Z63 zAUnl6*}9=7`d z7WzP`)u{FM0y)LOfv3q1(1^oK>*>>{;Q$G{a9qCJJQw)Hk2prq!Nk&X38;6jZe
4av+~hTpR<$0d~eTPmuGoYYf03-@cs#@i4Dy{mbK%_^m%*T~}2(xxF$9 zSSYLisZ`2Mp<@QUj2giOVsp5|h7%f#x`YEo4A+3q21Mo<)hHL2oMlbc&u z%yuNMe*5-DEi0NsS4&-;#X7g5LWr9i7+R8m%~(&C8#EmA;-S$|FVKSw4GjSxg%p4s zL_p4anHg**PpI zsLPCZvJSA|74=+4STI{#U|_JNcpWZi+J-W7b9X`Q>FWC7Ppa1mzgft gfz>YQ0d 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