August 2010 Archive

Parallel::Iterator von Andy Armstrong erlaubt die gleichzeitige (parallele) Ausführung mehrerer Task auf einem Rechner mit (vorzugsweise) mehreren CPUs.

Dabei kümmert sich Parallel::Iterator um korrekte Interprozeß-Kommunikation, Forking und Verteilung auf mehrere CPUs, so daß man sich voll und ganz auf die eigentliche Aufgabe konzentrieren kann.

 

Ein ganz einfaches Beispiel

In diesem Beispiel wird eine Liste von Quadratwurzeln aus einer Liste von Zahlen parallel ermittelt.

Das Unterprogramm square_root, das die eigentliche Rechenarbeit ausführt, erhält als ersten Parameter den Index aus @numbers und als weiteren Parameter die zu bearbeitende Zahl.

Um die Ergebnisse im @output korrekt anzuordnen, müssen sowohl Index und Ergebnis aus square_root zurückgegeben werden.

Fall die Reihenfolge keine Rolle spielt, kann der Index in der Rückgabeliste entfallen.

iterate_as_array kümmert sich um die Parallelisierung des Unterprogramms square_root.

#!/usr/bin/perl
use warnings;
use strict;

use Parallel::Iterator qw( iterate_as_array );

       # Indizes: 0  1  2  3  4  5  6
my @numbers = qw/ 1  4  9  16 25 36 49 /;

my @output = iterate_as_array( \&square_root, \@numbers );

print join("\t", @output), "\n";


sub square_root {
	my ($index, $number) =  @_;
	my $sr = sqrt($number);
	return ($index,$sr);
}

Das Programm erzeugt folgende Ausgabe:

1	2	3	4	5	6	7

 

Beispiel: Mehrere URLs parallel holen

Dieses Beispiel habe ich aus dem Beitrag Parallel map with Parallel::Iterator von David Golden übernommen.

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use Parallel::Iterator qw/iterate_as_array/;


# shamelessly stolen from 
# http://www.dagolden.com/index.php/935/parallel-map-with-paralleliterator/
 
my $ua = LWP::UserAgent->new( );

# this worker fetches a page or returns undef
my $worker = sub {
  my $index = shift;
  my $url = shift;
  my $resp = $ua->get($url);
  return undef unless $resp->is_success;
  return $resp->decoded_content;
};
 
# this gets a list of pages and fetches them in parallel
my @urls = qw(
	http://www.yahoo.de
	http://www.perl-howto.de
	http://www.perl.org
);

# Fetch pages in parallel
my @pages = iterate_as_array( $worker, \@urls );


foreach my $page ( @pages ) {
    # Do something with "$page";
    # ...
}

 

Siehe auch:

 

Sowohl Perl-Stand als auch Vorträge wurden auf der diesjährigen FrOSCon sehr gut angenommen.

Vorträge des Perl Developer Rooms

Nachfolgend eine Übersicht der Slides der Vorträge des Perl Developer Rooms auf der FrOSCon 2010:

Team

Der Erfolg des Messestandes und der Vorträge wäre ohne die freiwilligen Helfer gar nicht möglich gewesen. Besonderen Dank haben sich verdient:

Siehe auch

Fehlende Beiträge und Ergänzungen bitte als Kommentar. Danke.

Perl Messestand

Die dynamische Open Source Programmiersprache Perl wird dieses Jahr erstmals mit einem Stand auf der FrOSCon in der Fachhochschule Bonn-Rhein-Sieg in St. Augustin vertreten sein.

Wie bereits auf dem Linuxtag 2010 in Berlin und der CeBIT 2010 in Hannover werden Perl-Projekte und natürlich Perl selbst vorgestellt.

 

Perl Developer Room

Da der Perl Developer Room im letzen Jahr sehr gut angenommen wurde, gibt es auch dieses Jahr wieder einen Perl Developer Room.

 

Vortragsprogramm für Sonntag, den 22. August 2010
 
10.00 - 10.10   Begrüßung - Renée Bäcker
10.15 - 10.55   Testen mit Perl - Herbert Breunung
11.15 - 11.55   Perls Antwort auf cfg2html - Jens Rehsack
12.00 - 12.30   Profiling mit Devel::NYTProf - Renée Bäcker
14.00 - 14.40   Logging in Perl-Anwendungen - Renée Bäcker
14.45 - 15.05   WWW::Mechanize::Firefox - Max Maischein
15.15 - 15.55   Web::Scraper - Max Maischein
16.00 - 16.20   Dancer - Thomas Fahle
16.30 - 17.10   VB2Perl - Max Maischein
17.15 - 17.35   Padre - Renée Bäcker
17.45 - 18.25   BMATrainer - Renée Bäcker

 

 

Siehe auch:

Dank Gtk2::Notify von Florian Ragwitz ist sehr einfach Desktop-Notifications via D-Bus in eigene Programme einzubinden.

Log::Dispatch::Gtk2::Notify (ebenfalls von von Florian Ragwitz) vereinfacht die Ausgabe von Log-Meldungen als Desktop-Notifikation.

Gtk2::Notify

 

/2010/08/Desktop-Notify-01.png
#!/usr/bin/perl
use warnings;
use strict;

use Gtk2::Notify -init, "app_name";

my $summary = 'Gtk2::Notify';

my $message = 'Hallo Welt!';

my $icon = '/usr/share/app-install/icons/podbrowser.png';

my $attach_widget = undef;

my $notification = Gtk2::Notify->new($summary, $message, $icon, $attach_widget);

$notification->show;

Der Parameter summary erzeugt die Überschrift der Notification, message enthält die eigentliche Nachricht. Die Notification bleibt für 5 Sekunden auf dem Bildschirm stehen. Der optionale Parameter icon bindet ein Icon neben der Nachricht ein. Da die Notification einfach auf dem Desktop angezeigt werden soll und nicht an einem bestimmten geöffnetem Fenster, wird der Parameter attach_widget einfach auf undef gesetzt.

 

Log::Dispatch::Gtk2::Notify

Log::Dispatch::Gtk2::Notify wird als (weiteres) Ausgabeziel zu Log::Dispatch hinzugefügt. Je nach Level der Log-Nachricht wird automatisch ein passendes Icon in die Notification eingefügt.

/2010/08/Desktop-Notify-02.png
#!/usr/bin/perl
use strict;
use warnings;
use Log::Dispatch::Gtk2::Notify;

my $notify = Log::Dispatch::Gtk2::Notify->new(
        name      => 'notify',
        min_level => 'debug',
        app_name  => 'MyApp',
        title     => 'Important Message',
    );

$notify->log(level => 'alert', message => 'Hello, World!');

$notify->log(level => 'notice', message => 'Hello, World!');
/2010/08/Desktop-Notify-03.png

 

Siehe auch:

 

Über dieses Archiv

Diese Seite enthält alle Einträge von Perl HowTo von neu nach alt.

Juli 2010 ist das vorherige Archiv.

September 2010 ist das nächste Archiv.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.