Domanda

Ho uno script php che controlla gli aggiornamenti su molti (migliaia) di siti. A volte (più frequentemente all'aumentare del numero di siti), ottengo un timeout di esecuzione sull'aggiornamento di uno di questi siti e l'intero script va a vuoto.

L'idea migliore che mi è venuta in mente è di fork ogni aggiornamento, quindi se muore, l'aggiornamento generale continua. Da quello che ho raccolto, sembra che il threading PHP non sia qualcosa su cui fare affidamento, specialmente su una piattaforma Windows (su cui purtroppo devo lavorare).

Ho pensato di usare l'arricciatura come meccanismo di fork, ma non sarà molto più costoso per il server (in termini di tempo e potenza di elaborazione)?

Sarei felice di ascoltare alcune idee ed esperienze sull'inoltro / threading PHP ...

Grazie, Omer.

È stato utile?

Soluzione 5

Bene, alla fine sono andato a curl, e funziona benissimo.

Avevo bisogno di una soluzione multipiattaforma, mentre sviluppo su un Mac mentre in questo caso il server di produzione è Windows. Ciò significava che pcntl era fuori discussione.

Ero preoccupato che l'invio di migliaia di richieste di arricciatura al mio server potesse ostacolarlo e disturbare gli utenti sul sito in quel momento, ma mi sbagliavo.

Tuttavia, ho dovuto aggiungere un set_time_limit (0) allo script che avvia tutte le chiamate di arricciatura, altrimenti va in timeout.

Altri suggerimenti

Se hai intenzione di usare cURL, cerca nella multi * famiglia di metodi che ti consente di semplificare cURL e interagire con una serie di siti. Detto questo, potresti anche impostare il tuo tempo massimo di esecuzione (tramite ini_set) su un numero arbitrariamente alto e / o mantenere il tuo contatore watchdog in modo da non lasciarlo mai troppo alto.

Ma sì, alla fine si imbatteranno in problemi e nella mancanza del supporto completo per i thread in PHP. Quindi la soluzione migliore è guardare altre alternative, ad es. altre lingue / piattaforme che forniscono supporto per il threading nativo.

Sono riuscito a ottenere qualche forma di threading in php usando l'estensione pcntl. Non era la migliore soluzione ma ha fatto il trucco.

http://www.php.net/manual/en/ref .pcntl.php

prova anche i seguenti link, mi hanno dato un'idea di come implementare.

http://www.van-steenbeek.net/?q=php_pcntl_fork

http://www.hudzilla.org/phpbook/read.php/16_1_3

http://www.electrictoolbox.com/article/php/process- biforcano /

Spero che questo aiuti, ma php non è molto bravo con il threading.

È possibile impostare la direttiva ini < code> max_execution_time su 0. Ciò dovrebbe rimuovere il tempo massimo di esecuzione e consentire l'esecuzione dello script senza incorrere in questo errore. Questo valore deve essere impostato nel tuo file php.ini - l'utilizzo di ini_set non funziona.

set_time_limit(0);

set_time_limit docs

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top