Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Kuinka saada kaksi säiettä kommunikoimaan keskenään?

nörtti [21.02.2011 18:24:32]

#

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.

jalski [21.02.2011 20:00:29]

#

Voit aloittaa vaikka tutustumalla tähän tekstiin

Metabolix [21.02.2011 20:18:01]

#

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)

Chiman [21.02.2011 21:25:47]

#

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.html

Säikeissä jarruttavana tekijänä on nk. Global Interpreter Lock, josta löytyy lisätietoa linkin takaa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta