ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Threads
BeitragVerfasst: 17 Mai 2011, 00:19 
Offline
Geselle

Registriert: 25 Okt 2007, 14:53
Beiträge: 145
Hallo,
gibt es in Ruby eine bessere Moeglichkeit z.B. mit https://github.com/igrigorik/agent oder etwas etwas anderem dieses problem zu loesen?



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from multiprocessing import Pool
import time

def unwrap_self_f(arg, **kwarg):
return C.f(*arg, **kwarg)

class C:
def f(self, name):
print 'hello %s,'%name
time.sleep(5)
print 'nice to meet you.'

def run(self):
pool = Pool(processes=2)
names = ('frank', 'justin', 'osi', 'thomas')
pool.map(unwrap_self_f, zip([self]*len(names), names))

if __name__ == '__main__':
c = C()
c.run()


Ausgabe:

1
2
3
4
5
6
7
8
9

hello frank,
hello justin,
nice to meet you.
hello osi,
nice to meet you.
hello thomas,
nice to meet you.
nice to meet you.


Vielen Dank im Voraus.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Threads
BeitragVerfasst: 07 Jun 2011, 10:50 
Offline
Geselle

Registriert: 01 Mai 2005, 20:43
Beiträge: 163
Guten Morgen,

eine Möglichkeit mit Threads zu arbeiten, wäre die Klasse Thread. Einziges Problem ist, dass du dort keine sleep Funktion verwenden kannst, weil das sleep irgendwie alle Threads anhält...
Das würde dann grob so aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def warten(dauer)
zeit=Time.new
while Time.new-zeit<=dauer do
end
end
def thread(name)
Thread.new do
p "#{name}"
warten(2)
p "huhu #{name}"
end
end
for name in ["a", "b", "c", "d"] do
thread(name)
end
warten(3)

Die Ausgabe ergibt:

1
2
3
4
5
6
7
8
"a"
"b"
"c"
"d"
"huhu c"
"huhu b"
"huhu a"
"huhu d"

Ist interessant, dass die zweite Ausgabe durcheinandergewürfelt wird...

Ich hoffe, das hilft dir weiter
Gruß, Anfänger


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Threads
BeitragVerfasst: 07 Jun 2011, 12:44 
Offline
Hacker

Registriert: 24 Nov 2008, 14:56
Beiträge: 475
Anfänger hat geschrieben:
Ist interessant, dass die zweite Ausgabe durcheinandergewürfelt wird...
weil du keinen einfluß darauf hast, wann dein betriebssystem dem thread cpu zeit zur verfügung stellt!

gruss,
tom.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Threads
BeitragVerfasst: 11 Jun 2011, 08:57 
Offline
ri
Benutzeravatar

Registriert: 08 Apr 2006, 17:03
Beiträge: 788
Wohnort: Berlin
Anfänger hat geschrieben:
eine Möglichkeit mit Threads zu arbeiten, wäre die Klasse Thread. Einziges Problem ist, dass du dort keine sleep Funktion verwenden kannst, weil das sleep irgendwie alle Threads anhält...


Wie kommst du zu dieser Aussage? Natürlich kann man in Threads sleep verwenden, ohne daß andere Threads davon beeinflußt werden.

-Thomas

_________________
"Programs must be written for people to read, and only incidentally
for machines to execute."
- H. Abelson and G. Sussman
(in "The Structure and Interpretation of Computer Programs)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Threads
BeitragVerfasst: 13 Jun 2011, 19:23 
Offline
Geselle

Registriert: 01 Mai 2005, 20:43
Beiträge: 163
Oh, dann hab ich da wohl irgendwas durcheinander gebracht ^^
Danke fürs berichtigen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Threads
BeitragVerfasst: 13 Jun 2011, 21:02 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4872
Wohnort: RLP
Dieses Missverständnis kommt meist daher, dass system-sleep zusammen mit Ruby 1.8-Threads wirklich den Interpreter anhält: Ruby 1.8 hat Green Threads - der Interpreter ist also ein einziger System-Thread, der selbst wieder Threads simuliert. Das hat Vorteile und Nachteile, vor allem ist man nicht vom Thread-Verhalten des Host-Systems abhängig. Wenn sich hier also eine C-Bibliothek schlafen legt und die Systemfunktion verwendet, sagt der ganze Interpreter "gute nacht".

Allerdings stellt Ruby selbst natürlich ein Kernel#sleep bereit, dass den Thread im Interpreter-internen Scheduler schlafen legt.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: