Kuinka saada kaksi säiettä tai säie ja pääohjelma kommunikoimaan keskenään. Dataa tarvisi siirtää vain yhteen suuntaan (pääohjelman ja säikeen tapauksessa säikeestä pääohjelmaan). Olen yrittänyt etsiä googlella, mutta en löytänyt mitään mitä ymmärtäisin.
Voit aloittaa vaikka tutustumalla tähän tekstiin
Voit välittää tietoa ihan tavallisilla muuttujilla, mutta aina ennen tiedon lukemista tai kirjoittamista sinun pitää lukita lukko. Seuraavassa koodissa koko toiminnallisuus on kirjoitettu yhteen luokkaan:
import threading import time class Kanava: def __init__(self): self.lukko = threading.Lock() self.viestit = [] def laheta(self, viesti): with self.lukko: self.viestit.append(viesti) def lue(self, odota = True): while True: with self.lukko: if len(self.viestit) > 0: viesti = self.viestit[0] self.viestit = self.viestit[1:] return viesti if not odota: return None time.sleep(0.1) # Luodaan yksi kanava, jonka kautta voi lähettää viestejä: kanava = Kanava() # Yksi säie voi lähettää viestin näin: kanava.laheta("moi") # Pääohjelma voi odottaa viestiä näin: viesti = kanava.lue() # Pääohjelma voi lukea viestin odottamatta näin: viesti = kanava.lue(False) if viesti is None: print("Ei saatu viestiä!") else: print("Saatiin viesti: " + viesti)
Mikäli halutaan oikeasti rinnakkaista suoritusta Pythonilla, säikeiden tilalle kannattaa harkita prosesseja, joiden käyttö onnistuu multiprocessing-moduulilla:
http://docs.python.org/library/multiprocessing.
Säikeissä jarruttavana tekijänä on nk. Global Interpreter Lock, josta löytyy lisätietoa linkin takaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.