Kom ihåg mig?
Home Menu

Menu


Linux & PHP: Köra script (CLI) på flera kärnor

Ämnesverktyg Visningsalternativ
Oläst 2012-05-30, 18:50 #1
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
Standard Linux & PHP: Köra script (CLI) på flera kärnor

Någon som känner till ett sätt att köra ett php-script via cli så att jobbet kan dra nytta av att servern har flera kärnor? För tillfället använder mitt script bara en kärna men vill kunna använda flera för att boosta upp det hela lite.

Är detta möjligt? Visst kan jag dela upp scriptet och köra dem samtidigt (för att på så vis få fördelning på flera kärnor) men vill helst bara använda mig av ett script.
gregoff är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-05-30, 20:17 #2
Björklunds avatar
Björklund Björklund är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2006
Inlägg: 594
Björklund Björklund är inte uppkopplad
Mycket flitig postare
Björklunds avatar
 
Reg.datum: Jul 2006
Inlägg: 594
http://php.net/manual/en/function.pcntl-fork.php
Björklund är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-05-30, 22:08 #3
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
Citat:
Ursprungligen postat av Björklund Visa inlägg
Jo jag har kikat på den innan men helt enkelt inte förstått hur det fungerar ;-)
Tycker exemplen var väldigt förvirrade.

Det jag letar efter måste inte nödvändigtvis ligga på php-nivå.
gregoff är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-05-31, 08:31 #4
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Work/message queues. Dela upp arbetet i flera delar, kör dessa separat i varsin worker thread. T ex Gearman, RabbitMQ, AMQP, 0MQ etc.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-06-01, 12:21 #5
pelmereds avatar
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2010
Inlägg: 1 342
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
pelmereds avatar
 
Reg.datum: May 2010
Inlägg: 1 342
Citat:
Ursprungligen postat av gregoff Visa inlägg
Jo jag har kikat på den innan men helt enkelt inte förstått hur det fungerar ;-)
Tycker exemplen var väldigt förvirrade.

Det jag letar efter måste inte nödvändigtvis ligga på php-nivå.
Här har du ett bra exempel: http://chemicaloliver.net/programmin...mage-resizing/

Värt att tänka på ät att du endast ska använda detta om du anropar PHP-skriptet från kommandoraden(dvs via CLI). Kör du via en webbserver kan du få oväntade resultat iom att PHP då inte är trådsäkert.

Vill du göra större grejer och skala ut det på flera maskiner så kan Gearman vara ett alternativ. Då har du en jobbserver och sedan flera worker servrar. Detta fungerar väldigt bra om du vill göra detta asynkront i bakgrunden, men det finns även stöd för att skicka tillbaka meddelanden så att du kan presentera resultat när det är klart(antingen via push eller kolla med AJAX)
pelmered är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-06-01, 13:46 #6
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
Citat:
Ursprungligen postat av ITisGood.se Visa inlägg
Här har du ett bra exempel: http://chemicaloliver.net/programmin...mage-resizing/

Värt att tänka på ät att du endast ska använda detta om du anropar PHP-skriptet från kommandoraden(dvs via CLI). Kör du via en webbserver kan du få oväntade resultat iom att PHP då inte är trådsäkert.

Vill du göra större grejer och skala ut det på flera maskiner så kan Gearman vara ett alternativ. Då har du en jobbserver och sedan flera worker servrar. Detta fungerar väldigt bra om du vill göra detta asynkront i bakgrunden, men det finns även stöd för att skicka tillbaka meddelanden så att du kan presentera resultat när det är klart(antingen via push eller kolla med AJAX)

Detta såg ut som nåt som skulle kunna funka för mig. Men hur begränsar jag antalet grenar i en foreach-loop? När jag har alla (ex 4 st) kärnor upptagna så vill jag vänta med att skapa en gren till tills att en av dem är färdig.
gregoff är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-06-01, 14:28 #7
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Citat:
Ursprungligen postat av gregoff Visa inlägg
Detta såg ut som nåt som skulle kunna funka för mig. Men hur begränsar jag antalet grenar i en foreach-loop? När jag har alla (ex 4 st) kärnor upptagna så vill jag vänta med att skapa en gren till tills att en av dem är färdig.
Då använder du gearman och 4 worker threads.

Att forka processen ställer till fler problem än det löser vid alla användningområden förutom CLI-script. Du låser in dig vid en PHP-implementation och får göra fulhack för att stödja en annan. Implementationer för webbservrar för ett språk utan riktig trådning är helt enkelt anpassad för att köras i en process. Du kommer förlora prestanda och få svårare att optimera dina inställningar.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 14:33.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017