ugrás a tartalomhoz

DRY

eddig bírtam szó nélkül · 2012. Júl. 10. (K), 21.29
Bocs, ez python, de épp ezzel játszottam, meg a nyelvnek egyébként sincs itt jelentősége...
Eszembe jutott ama bizonyos Don't Repeat Yourself elv.
Szálkezelést próbálgattam (szálbiztos és nem szálbiztos függvények használata multithread környezetben hogy megy, hogyan tudom bizonyítani, hogy a nem szálbiztos függvény ilyen esetben hibásan működik)

A tesztek indítása valahogy így nézne ki:

	def main(self):
		t1=threading.Thread(target=self.runAThread)
		t2=threading.Thread(target=self.runAThread)
		t1.start()
		t2.start()
		t1.join()
		t2.join()
Itt ugye van néhány ismétlődés, ami elég rondán néz ki.
Lecserélhetem ilyenre:
	def main(self):
		threadLista=(threading.Thread(target=self.runAThread),threading.Thread(target=self.runAThread))
		for t in threadLista:
			t.start()
		for t in threadLista:
			t.join()

Ez így kicsit rugalmasabb (egy sort kell csak módosítani, ha újabb szálat akarok indítani, netán másik függvényt futtatni az újabb szálban), de nem lett sokkal jobb a helyzet, itt is ismétlődik a kód egy része, de...
Lehet ezt tovább szépíteni? Hiszen előbb el kell indítani valamennyi szálat, csak utána mehet egyenként a join...

Jó, ez most egy nagyon egyszerű példa, de hasonló helyzet talán nagyobb méretekben is előfordulhat. Ilyenkor mi a teendő? Van hova egyszerűsíteni? Vagy ilyenkor jön a vállrándítás, hogy minden nem lehet tökéletes?
 
1

threadLista=(threading.Thread

Poetro · 2012. Júl. 10. (K), 22.12
threadLista=(threading.Thread(target=self.runAThread),threading.Thread(target=self.runAThread))
helyett inkább
threadLista = [threading.Thread((target=self.runAThread) for i in range(2)]
bár nem írtam még túl sok Python kódot, de ez lényegesen DRY-abbá teszi.
2

Köszi...

eddig bírtam szó nélkül · 2012. Júl. 10. (K), 22.18
Ennyire már nem mertem eldurvulni, de van benne igazság. ;-)
Ugye azt jól látom, hogy kulturált formában nem lehet megszabadulni a két utolsó for-tól a szálak miatt?


ui: ha pythonozni vágynál, range helyett erősen ajánlott az xrange használata a 2.x verzióban a kisebb erőforrás igény miatt.