Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: PHP fork sotto Windows

  1. #1

    PHP fork sotto Windows

    Ciao a tutti,
    leggendo vari siti internet ho scoperto che non è possibile utilizzare la fork() sotto windows..
    Sto sviluppando uno spider in PHP (ok non è il linguaggio perfetto per fare ciò) che leggere le pagine di un certo sito e raccoglie informazioni..solo che ora le richieste le fa in modo "seriale" ed è più il tempo che attende le pagine che raccogliere i dati (ora funziona cosi: chiede una pagina, attende il contenuto, dal contenuto estrae delle informazioni; al termine richiede una nuova pagina, attende il contenuto..etc.).

    Vorrei creare piu processi in modo da fare irchieste in parallelo e quindi diminuire i tempi d'attesa del "download" della pagina..
    Cosnigli?

  2. #2
    Utilizza uno script "controller" che avvia in parallelo altri script PHP che effettuano il download. Per la gestione degli script puoi usare exec(), etc.

  3. #3
    proprio ora stavo vedendo uno script fatto da un tizio..sinceramente non so se posso postare il link, ma se cerchi "PHP Multithreading" e vai sul secondo risultato..trovi qlk cosa solo che a mio avviso non può funzionare..erro?
    cmq io volevo una soluzione in php.. non esistono librerie o moduli non ufficiali ?

  4. #4
    Secondo quale criterio la soluzione indicata NON è in PHP?

    Se ti riferisci a http://casapiddu.wordpress.com/2008/...ultithreading/ funziona certamente visto che si appoggia ad un web server per la gestione del fork. Anche se personalmente preferisco lavorare direttamente con i processi, in questo modo lo spider è più leggero e portabile.

  5. #5
    intendevo una cosa tipo fork() o funzioni simili..non un costrutto con exec tutto qui..
    cavolo però è assurdo che sotto windows non ci sia una soluzione !!!
    invece, in merito a quel link di cui ti parlavo..in che senso "si appoggia ad un web server per la fork"?

  6. #6

  7. #7
    # function start(){
    # $this->fp = fsockopen($this->host,$this->port);
    # $header = "GET ".$this->thisFileName."?threadrun=1&f=".urlencode($this->func).$this->arg." HTTP/1.1\r\n";
    # $header .= "Host: ".$this->host."\r\n";
    # $header .= "Connection: Close\r\n\r\n";
    # fputs($this->fp,$header);
    # }

    mmm ... scusa l'ignoranza ma non vedo nulla che mi possa dire ke usa un web service..

  8. #8
    A me sembrava di aver scritto che si appoggia ad un web server ed infatti all'interno del metodo start() viene implementata una richiesta HTTP verso un web server.

  9. #9
    ops ok.
    .però scusa con quello script, se io ho 250 richieste da fare..me le farà sempre in serie..o erro?

  10. #10
    Le richieste vengono inviate in modo sequenziale al web server che le elabora in parallelo. Poi in modo nuovamente sequenziale ne viene letto il risultato.

    Se provi il codice di esempio ti rendi conto che il tempo trascorso tra l'esecuzione di un "thread" ed il successivo è troppo basso per una reale richiesta sequenziale. Per verificarlo ti basta inserire un sleep(2) nella funzione get().

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.