Myslím, že článek http://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/ to docela hezky popisuje.
Implementace přes thready by asi byla poměrně drahá. V zásadě to jde udělat docela jednoduše podobně jako anonymní třídy v Javě.
Vzhledem k tomu, že python podporuje closure nativně (i když místy dost těžkopádně - viz diskuse pod předchozím článkem či odkazovaný stackoverflow), je to v zásadě jen o tom, že při zavolání yield si musí uchovat aktuální closure a pozici v bytecode. Při dalším volání next() obnoví tento stav a pokračuje v provádění funkce, která defakto nemá žádný stack, pouze closure.
Diky za odkaz, ten clanek vypada hodne zajimave, mozna z toho neco pouziju priste :)
Podobne je to v Lua, tam je multithreading problematicky (no on je problematicky vsude, coz uz kdysi psal tusim Ousterhout :) a hlavne se diky pekne udelanym korutinam (yield a spol. - ne tak omezene jako v Pythonu!) daji psat dost zajimave a pritom efektivne vykonavane programy jedouci klidne i na MCU.
jeste pridam info, ze pri hledani reseni problemu s uzavery v Pythonu (pod predchozim clankem v diskuzi) jsem nasel doporuceni, ze nekdy se namisto uzaveru hodi pouzit prave generatory: http://stackoverflow.com/questions/2009402/read-write-python-closures
Sice me to pripadne jako zametani problemu pod koberec :-) ale co uz nadelame...