abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 13:55 | Nová verze

    Byl vydán Mozilla Firefox 149.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně, zobrazení dvou webových stránek vedle sebe v jednom panelu (split view) nebo možnost přidat poznámky k panelům (Firefox Labs). Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 149 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    dnes 13:22 | Nová verze

    Byly vydány nové verze 5.3.0 a 6.0.0 svobodného multiplatformního programu pro skicování, malování a úpravu obrázků Krita (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Obě verze vycházejí ze stejného zdrojového kódu – rozdíl je v použitých verzích Qt a KDE Frameworks. Krita 6.0.0 je první vydání postavené na Qt 6 a stále je považovaná za experimentální. Má lepší podporu Waylandu. Přináší podporu protokolu Wayland

    … více »
    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána nová verze 10.2 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnout lze nové balíčky Immich, Immich Machine Learning, uv a RustDesk Client.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | Nová verze

    TypeScript (Wikipedie), tj. JavaScript rozšířený o statické typování a další atributy, byl vydán v nové verzi 6.0. Příští verze 7.0 je kvůli výkonu přepisována do programovacího jazyka Go.

    Ladislav Hagara | Komentářů: 0
    včera 20:33 | Zajímavý článek

    Christian Schaller z Red Hatu na svém blogu popsal své zkušenosti s používáním AI při vývoji open source aplikací pro Linux. Pomocí různých AI aktualizoval nebo vytvořil aplikace Elgato Light GNOME Shell extension, Dell Ultrasharp Webcam 4K, Red Hat Planet, WMDock, XMMS resuscitated (aktualizace z GTK 2 a Esound na GTK 4, GStreamer a PipeWire) a Monkey Bubble. SANE ovladač pro skener Plustek OpticFilm 8200i se mu zatím nepovedl.

    Ladislav Hagara | Komentářů: 7
    včera 19:44 | IT novinky

    Americké firmy Tesla a SpaceX postaví v texaském Austinu moderní komplex na výrobu čipů pro umělou inteligenci (AI). Součástí projektu s názvem Terafab budou dvě moderní továrny na výrobu čipů – jedna se zaměří na automobily a humanoidní roboty, druhá na datová centra ve vesmíru. Uvedl to generální ředitel těchto firem Elon Musk. Projekt by podle odhadů měl stát 20 miliard USD (zhruba 425 miliard Kč).

    Ladislav Hagara | Komentářů: 6
    včera 15:00 | Nová verze

    Byla vydána nová stabilní verze 6.11 (YouTube) multiplatformního frameworku a GUI toolkitu Qt. Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 01:44 | Bezpečnostní upozornění

    Ubuntu 26.04 patrně bude ve výchozím nastavení zobrazovat hvězdičky při zadávání hesla příkazu sudo, změna vychází z nové verze sudo-rs. Ta sice zlepší použitelnost systému pro nové uživatele, na které mohlo 'tiché sudo' působit dojmem, že systém 'zamrzl' a nijak nereaguje na stisky kláves, na druhou stranu se jedná o možnou bezpečnostní slabinu, neboť zobrazování hvězdiček v terminálu odhaluje délku hesla. Původní chování příkazu sudo

    … více »
    NUKE GAZA! 🎆 | Komentářů: 14
    22.3. 21:33 | Komunita

    Projekt systemd schválil kontroverzní pull request, který do JSON záznamů uživatelů přidává nové pole 'birthDate', datum narození, tedy údaj vyžadovaný zákony o ověřování věku v Kalifornii, Coloradu a Brazílii. Jiný pull request, který tuto změnu napravoval, byl správcem projektu Lennartem Poetteringem zamítnut s následujícím zdůvodněním:

    … více »
    NUKE GAZA! 🎆 | Komentářů: 31
    22.3. 17:22 | Nová verze

    Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 163 (pdf).

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (15%)
     (7%)
     (1%)
     (12%)
     (29%)
     (2%)
     (5%)
     (1%)
     (13%)
     (24%)
    Celkem 1143 hlasů
     Komentářů: 27, poslední 17.3. 19:26
    Rozcestník

    Dotaz: vlakna v PERLu

    7.1.2011 14:52 toxLinuch
    vlakna v PERLu
    Přečteno: 719×
    Mam script v PERLu, ktery uklada v ruznych intervalech data do DB, ale zpozdeni je vzdy stejne. Problem je, ze script boptna v pameti a to takovym zpusobem, ze je schopen polozit i stroj. Script ceka na vstup z pipe a pote reaguje. syntaxe script1.pl | script2.pl
    script2.pl
    sub update {
      my ($item) = @_;
      print "item to DB: $item\n";
      sleep(2);
      if (my $dbh = DBI->connect('DBI:mysql:dataWeb', 'xxx', 'xxx')) {
        my $query="UPDATE onWeb SET name='".$item."' WHERE id=0;";
        my $sth = $dbh->prepare($query);#zkousel jsem pouzit i $dbh->do ale je to stejny
        my $rv  = $sth->execute();
        $dbh->disconnect;
      }
      else {
        print "Could not connect to database: $DBI::errstr";
      }
    }
    
    
    my $scThread=0;
    while (my $line = <STDIN>) {
      if ($line ne "") {
        chomp ($line);
        $scThread = threads->create(\&update, $line);
      }
    }
    
    Nevite nekdo prosim vas coje spatne? Kde mam udelat zmenu, aby script bezel jak ma? Soft mysql 5.0.51a a perl 5.10.

    Odpovědi

    7.1.2011 15:34 Ivan
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    Asi je to offtopic, ale opravdu je nutne kvuli kazdemu update otevirat zvlastni konexi? A jsi si jisty, ze libmysql je thread-safe?
    7.1.2011 17:14 toxLinuch
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    zkousel jsem pedat hodnotu spojeni jako parametr do vlakna bohuzel perl vyhodil error a nejelo to. postupoval sem takto :
    script2.pl
    sub update {
      my ($item,$dbh) = @_;
      print "item to DB: $item\n";
      sleep(2);
      my $query="UPDATE onWeb SET name='".$item."' WHERE id=0;";
      my $sth = $dbh->prepare($query);#zkousel jsem pouzit i $dbh->do ale je to stejny
      my $rv  = $sth->execute();
    }
    
    
    my $scThread=0;
    my $dbh = DBI->connect('DBI:mysql:dataWeb', 'xxx', 'xxx');
    while (my $line = <STDIN>) {
      if ($line ne "") {
        chomp ($line);
        $scThread = threads->create(\&update, $line, $dbh);
      }
    }
    $dbh->disconnect;
    
    Hlaseni perlu:
    Thread 2 tady dochazi ke zvysovani cisla vlakna terminated abnormally: DBD::mysql::db prepare failed: handle 2 is owned by thread 198e010 not current thread 1e2b7e0 (handles can't be shared between threads and your driver may need a CLONE method added)
    
    Pridal jsem teda shared:
    pridano
    use threads::shared;
    ...
    my $scThread=0;
    my $dbh = DBI->connect('DBI:mysql:dataWeb', 'xxx', 'xxx');
    share ($dbh);
    while (my $line = <STDIN>) {
    ...
    
    perl hlasi
    Thread 1 terminated abnormally: dbih_getcom handle threads::shared::tie=SCALAR(0xe739c0) is not a DBI handle at script2.pl <STDIN> line 1
    Thread 2 terminated abnormally: dbih_getcom handle threads::shared::tie=SCALAR(0xe739c0) is not a DBI handle at script2.pl <STDIN> line 2
    7.1.2011 17:29 toxLinuch
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    tak jsem ted vygooglil na cpanu:

    Threads and Thread Safety
    Perl 5.7 and later support a new threading model called iThreads. (The old "5.005 style" threads are not supported by the DBI.)

    In the iThreads model each thread has it's own copy of the perl interpreter. When a new thread is created the original perl interpreter is 'cloned' to create a new copy for the new thread.

    If the DBI and drivers are loaded and handles created before the thread is created then it will get a cloned copy of the DBI, the drivers and the handles.

    However, the internal pointer data within the handles will refer to the DBI and drivers in the original interpreter. Using those handles in the new interpreter thread is not safe, so the DBI detects this and croaks on any method call using handles that don't belong to the current thread (except for DESTROY).

    Because of this (possibly temporary) restriction, newly created threads must make their own connections to the database. Handles can't be shared across threads.

    But BEWARE, some underlying database APIs (the code the DBD driver uses to talk to the database, often supplied by the database vendor) are not thread safe. If it's not thread safe, then allowing more than one thread to enter the code at the same time may cause subtle/serious problems. In some cases allowing more than one thread to enter the code, even if not at the same time, can cause problems. You have been warned.

    Jestli to chapu dobre ma se delat v kazdem vlakne zvlast pripojeni. Pak tedy nechapu proc mi to zere pamet. Vzdyt do nekolika hodin mi padne cely system, kudla drat.
    7.1.2011 18:31 VM
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    Nikde nevidim $scThread->join() . Rekl bych ze vytvaris zombie thready.
    7.1.2011 20:33 toxLinuch
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    Nemuzu cekat na ukonceni children vlakna tim bych nezpracoval dalsi vstup. Potrebuju ,aby se operace ve vlaknu zpracovaly a pote se vlakno ukoncilo. Mezitim se vsak zpracovava dalsi vstup. Kdyz se divam na vypis vlaken k danemu procesu tak se vlakna ukoncuji. Pro zobrazeni vlaken k danemu procesu pouzivam ps -p 14814 uH
    10.1.2011 15:34 toxLinuch
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    Vyreseno-naprogramovano v ansiC. I kdyz mi to prijde jako jit s tankem na blechu, ale co uz se da delat. Vyhoda cecka je ze se da perfektne ovladat pamet apod. No co vam budu povidat. Api bezi a ma stale stejne pozadavky jako po spusteni. Takze super. Cecku zdar-Perl sux(teda na takove aplikace jinak dobry ;-) )
    10.1.2011 16:56 NeoV | skóre: 23
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    hmmm take hinty:

    1. naco su Vam vlakna pre jednoduche updaty jedneho zaznamu ? Ved samotne neustale vytvaranie spojenia kazdym novym vlaknom je x-nasobne narocnejsie ako jednovlaknova app. ktora si drzi otvorene spojenie (v pripade jeho ukoncenia ho len znovu-otvori) a po kazdom nacitani noveho riadku z pajpy hned vykona update do DB jedneho zaznamu, co je operacia porovnatelna s vyvolanim noveho vlakna...

    2. pri pouzivani viacerych vlakien, ktore si kazde vytvara vlastne nove spojenie na DB sa Vam moze v jednom z miliona pripadov stat, ze prve vlakno bude vytvarat spojenie s DB dlhsie ako druhe (neskor vytvorene vlakno) a tym padom druhe vlakno vykona update ako prve...

    3. ak teoreticky pride v rychlom slede velke mnozstvo 'riadkov' do pajpy, tak bud sa zdrbe DB alebo sa ti nevytvoria spojenia na DB nakolko dosiahnes max. pocet otvorenych pripojeni na DB
    10.1.2011 21:13 toxLinuch
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    naznacil jsem cast ulohy ne vsak celou ;-). V cecku je jedno spojeni, ktere se predava zadne dementni otvirani porad dokola. Vyborna obsluha pameti- jeji uvolneni, apod.
    10.1.2011 19:50 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    Co máš za distribuci? Perl 5.10 zapomíná dealokovat jednu proměnnou při ukončování vlákna. Pokud to distributor neopravil sám, tak by měl být postižen i tento kód:
    use threads;
    
    sub ThreadRoutine {}
    
    while (1) {
        threads->new(\&ThreadRoutine)->join;
    }
    

    Oprava.

    10.1.2011 21:14 toxLinuch
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    distro je debian lenny. nic takoveho jsem nikde nezjistil. Diky za info. Ted uz to resit nebudu, ale je to dobre vedet,
    11.1.2011 08:45 ph0enix | skóre: 18 | Praha
    Rozbalit Rozbalit vše Re: vlakna v PERLu
    Pokud bych mel pouzit vlakna, pouzil bych jen dve a to nasledovne - hlavni vlakno nacita data ze vstupu a pres sdilene pole je predava druhemu vlaknu, jenz nasledne aktualizuje databazi. Takto bude zajisteno zpracovani dat v poradi jak dosly. Netusim ale jak to bude rychle / jaka bude rezie.
    use threads;
    use threads::shared;
    
    my $line;
    my $thr_end;
    my @thr_data;
    my $thr_worker;
    
    share($thr_end);
    share(@thr_data);
    
    $thr_end    = 0;
    $thr_worker = threads->create(\&thr_sub);
    @thr_data   = ();
    
    sub thr_sub {
        my $dbh = DBI->connect('DBI:mysql:dataWeb;mysql_server_prepare=1', 'user', 'password');
        my $qry = "UPDATE onWeb SET name=? WHERE id=0";
        my $sth;
        my $tmp;
    
        die "Can't connect to database" if (!$dbh);
        $sth = $dbh->prepate($qry);
    
        while (!$thr_end) {
            {
                lock(@thr_data);
                $tmp = shift(@thr_data);
            }       
            $sth->execute($tmp) if(defined($tmp));
        }       
        lock(@thr_data);
        $sth->execute($_) for (@thr_data);
        $dbh->disconnect();
    }
    
    while ($line = <STDIN>) {
        chomp($line);
        next if ($line =~ /^\s*$/);
        {       
            lock(@thr_data);
            push @thr_data, $line;
        }
    }
    
    $thr_end = 1;
    $thr_worker->join();
    

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.