Seite 1 von 1

2 Sachen gleichzeitig machen

Verfasst: Dienstag 29. August 2006, 21:42
von Keanuf
Hallo ich stehe vor folgendem Problem.

Ich will python dazubringen 2 Sachen gleichzeitig zu machen.
Am besten an einem Beispiel gelle ;)

Code: Alles auswählen

while True :
    data = dateihandler.read(8192)
    #hier mach mal was
    neuerdateihandler.write(data)

#andere schleife parallel gleich aufgebaut
while True :
    data2 = dateihandler2.read(8192)
    #hier mach mal was
    neuerdateihandler2.write(data2)
also während python in einer
while schleife arbeitet, soll es parallel dazu noch in einer andere while schleife Werte auslesen.

So nun hoff ich, das ich hier nicht auf dem Holzweg bin.
Folgendes habe ich schon probiert,
die 2. Anfrage While schleife auszulagern und dann per os.popen
(oder subprocess) aufzurufen,
leider druchlaufen beide schleifen einen Filehandler,
denn ich über Kommandozeile nicht übergeben kann, oder eventuell doch ? ;)

Eventuell hat hier jemand einen Lösungsansatz.

Danke

Re: 2 Sachen gleichzeitig machen

Verfasst: Dienstag 29. August 2006, 21:58
von gerold
Keanuf hat geschrieben:Ich will python dazubringen 2 Sachen gleichzeitig zu machen.
Hi Keanuf!

Dann würde ich mich mal ein wenig mit Threads befassen.

- http://docs.python.org/lib/module-thread.html
- http://docs.python.org/lib/module-threading.html
- http://www.python-forum.de/topic-3869.html

mfg
Gerold
:-)

Verfasst: Dienstag 29. August 2006, 22:22
von Keanuf
Mensch Gerold SUPER Danke dir.
Lese schon fleissig und ich denke das war ein Volltreffer.

Verfasst: Donnerstag 31. August 2006, 13:07
von Python 47

Code: Alles auswählen

import thread
def thread_func_eins():
   thread.start_new_thread(func_eins, ())

def func_eins():
   while True :
      data = dateihandler.read(8192)
      #hier mach mal was
      neuerdateihandler.write(data)

#andere schleife parallel gleich aufgebaut
def func_zwei():
   while True :
      data2 = dateihandler2.read(8192)
      #hier mach mal was
      neuerdateihandler2.write(data2)

thread_func_eins()
func_zwei()

Verfasst: Donnerstag 31. August 2006, 19:34
von Joghurt
Stackless Python hat auch sogenannte Tasklets, ist vielleicht auch von (akademischem) Interesse

Verfasst: Donnerstag 31. August 2006, 21:08
von Leonidas
Joghurt hat geschrieben:Stackless Python hat auch sogenannte Tasklets, ist vielleicht auch von (akademischem) Interesse
Fürs akademische Interesse hätte ich auch noch Greenlets anzubieten, ein Spin-off der Tasklets von Armin Rigo, als C-Modul für CPython (auch bekannt als py.magic.greenlet).

Verfasst: Donnerstag 31. August 2006, 22:42
von Michael Schneider
Moin,

nur mal so aus Spaß :) (ungetestet)

Code: Alles auswählen

from thread import start_new_thread as snThread

def func_n(dateihandler, neuerdateihandler, data = True): 
   while data : 
      data = dateihandler.read(8192) 
      #hier mach mal was 
      neuerdateihandler.write(data) 

snThread(func_n, (dateihandler, neuerdateihandler))
snThread(func_n, (dateihandler2, neuerdateihandler2))
Grüße,
der Michel