Jadual Kandungan
2. Memilih selang pengundian yang betul
3. Amalan terbaik dan petua keselamatan
✅ Gunakan had percubaan maksimum
✅ Mengendalikan kegagalan sementara dengan anggun
✅ Bersihkan atau memberitahu pada waktu tamat tempoh
✅ Elakkan dalam permintaan web apabila mungkin
4. Contoh: Mengundurkan giliran pekerjaan yang disokong redis
Nota akhir
Rumah pembangunan bahagian belakang tutorial php Melaksanakan pengundian tugas tak segerak dengan php `sementara gelung dan` usleep`

Melaksanakan pengundian tugas tak segerak dengan php `sementara gelung dan` usleep`

Aug 04, 2025 am 10:49 AM
PHP while Loop

Untuk melaksanakan pengundian negeri untuk tugas -tugas asynchronous dalam PHP, anda boleh menggunakan gelung sementara bersempena dengan fungsi usleep untuk pemeriksaan masa yang selamat. 1. Pelaksanaan Asas: Semak status tugas dengan memanggil Getjobstatus gelung, tetapkan bilangan maksimum percubaan (seperti 60 kali) dan masa selang (seperti 50ms), dan keluar dari gelung apabila tugas selesai, gagal atau tamat masa. 2. Tetapkan selang pengundian secara munasabah: disyorkan untuk menggunakan 100ms (100,000 microseconds) sebagai nilai awal untuk mengelakkan beban sistem atau terlalu lama yang mempengaruhi kelajuan tindak balas. 3. Amalan terbaik termasuk: bilangan maksimum percubaan mesti ditetapkan untuk mengelakkan gelung tak terhingga; Pengendalian kegagalan sementara seperti pengecualian rangkaian untuk mengelakkan pengundian mengganggu; Log perlu direkodkan atau penurunan pemprosesan hendaklah dicetuskan apabila tamat masa; Pengundian panjang harus dielakkan dalam permintaan web sebanyak mungkin. Jika perlu, set_time_limit dan ignore_user_abort harus dipanggil untuk melanjutkan masa pelaksanaan dan mencegah gangguan pengguna; Penyelesaian yang lebih baik adalah untuk mengembalikan ID tugas dan mengundi melalui Ajax oleh hujung depan, atau menggunakan sistem giliran seperti beratur Laravel. 4. Skenario Sampel: Dapatkan status tugas dari Redis, cek gelung sehingga siap, ralat atau tamat masa. Singkatnya, sementara Plus Usleep sesuai untuk keperluan pengundian mudah dalam skrip CLI, tetapi dalam senario di mana keseragaman tinggi atau keperluan masa nyata adalah alternatif yang lebih tinggi, lebih cekap seperti WebSocket, SSE atau beratur mesej harus dipertimbangkan. Kaedah ini mudah dan boleh dipercayai, tetapi perhatian harus dibayar kepada penggunaan sumber dan kawalan masa untuk memastikan kestabilan sistem.

Melaksanakan pengundian tugas tak segerak dengan php `sementara gelung dan` usleep`

Apabila berurusan dengan tugas -tugas asynchronous dalam muat naik pemprosesan seperti PHP, menghasilkan laporan, atau menunggu panggilan balik API luaran -anda sering perlu menyemak status kerja latar belakang sehingga selesai. Satu cara yang mudah untuk melaksanakannya adalah menggunakan gelung while yang digabungkan dengan usleep untuk mengundi terkawal. Pendekatan ini berguna dalam skrip CLI atau konteks web jangka panjang di mana anda tidak boleh bergantung pada pemberitahuan masa nyata (contohnya, webhooks).

Melaksanakan pengundian tugas tak segerak dengan php `sementara gelung dan` usleep`

Inilah cara untuk melakukannya dengan berkesan dan selamat.


1. Pengundian Asynchronous Asas dengan while dan usleep

Idea teras adalah untuk berulang kali menyemak keadaan (contohnya, penyelesaian kerja) dalam gelung, berhenti di antara cek untuk mengelakkan sistem yang menggembirakan.

Melaksanakan pengundian tugas tak segerak dengan php `sementara gelung dan` usleep`
 $ jobid = 'ABC123'; // menganggap ini lebih awal
$ PollInterval = 50000; // 50ms dalam mikrosecond
$ maxAttempts = 60; // max 60 percubaan = ~ 3 saat jumlah
$ percubaan = 0;

manakala ($ percubaan <$ maxAttempts) {
    $ status = getJobstatus ($ jobid); // fungsi anda untuk memeriksa status

    jika ($ status === &#39;selesai&#39;) {
        echo "pekerjaan siap berjaya. \ n";
        rehat;
    }

    jika ($ status === &#39;gagal&#39;) {
        echo "pekerjaan gagal. \ n";
        rehat;
    }

    // Tunggu sebelum tinjauan seterusnya
    usleep ($ pollInterval);
    $ percubaan;
}

jika ($ percubaan> = $ maxAttempts) {
    echo "Job Waktu Keluar. \ N";
}

Dalam contoh ini:

  • usleep(50000) menjeda skrip selama 50 juta saat.
  • Kami mengehadkan bilangan percubaan untuk mengelakkan gelung tak terhingga.
  • Gelung keluar apabila pekerjaan itu berjaya, gagal, atau keluar.

2. Memilih selang pengundian yang betul

Nilai yang diluluskan ke usleep() adalah dalam mikroseconds :

Melaksanakan pengundian tugas tak segerak dengan php `sementara gelung dan` usleep`
  • 1 second = 1,000,000 microseconds
  • Selang waktu biasa:
    • 50000 = 50ms
    • 100000 = 100ms
    • 500000 = 500ms

Terlalu pendek selang (misalnya, 10ms) boleh:

  • Melampaui pangkalan data atau API
  • Sumber pelayan sisa
  • Had Kadar Pencetus

Terlalu lama selang (contohnya, 2 saat) boleh:

  • Pengesanan kelewatan penyelesaian pekerjaan
  • Menjadikan sistem merasa lambat

Cadangan: Mulakan dengan 100ms ( 100000 ) untuk kebanyakan kes penggunaan.


3. Amalan terbaik dan petua keselamatan

✅ Gunakan had percubaan maksimum

Sentiasa menghalang gelung tak terhingga dengan menutup semula.

✅ Mengendalikan kegagalan sementara dengan anggun

Isu rangkaian atau kesilapan sementara tidak boleh merosakkan gelung pengundian anda.

 $ status = getJobstatus ($ jobid);

jika ($ status === palsu) {
    // misalnya, waktu tamat API
    usleep ($ pollInterval);
    $ percubaan;
    teruskan;
}

✅ Bersihkan atau memberitahu pada waktu tamat tempoh

Jangan hanya keluar dengan senyap. Log acara atau mencetuskan sandaran.

✅ Elakkan dalam permintaan web apabila mungkin

Gelung jangka panjang dalam skrip web boleh:

  • Tekan php's max_execution_time
  • Blok pelayan web
  • Menyebabkan ux miskin

Alternatif yang lebih baik:

  • Kembalikan ID Kerja dan biarkan pengundian frontend melalui Ajax
  • Gunakan pekerja giliran (misalnya, dengan beratur Laravel atau messenger Symfony)

Tetapi jika anda mesti melakukannya dalam konteks web, meningkatkan had:

 set_time_limit (30); // Benarkan sehingga 30 saat
abaikan_user_abort (benar); // Teruskan walaupun pengguna menutup penyemak imbas

4. Contoh: Mengundurkan giliran pekerjaan yang disokong redis

Katakan anda menggunakan Redis untuk menyimpan status pekerjaan:

 fungsi getjobstatus ($ jobid) {
    $ redis = redis baru ();
    $ redis-> Connect (&#39;127.0.0.1&#39;, 6379);
    kembali $ redis-> get ("Job: $ Jobid: Status");
}

$ jobid = &#39;task_789&#39;;
$ percubaan = 0;
$ maxAttempts = 20;
$ selang = 100000; // 100ms

manakala ($ percubaan <$ maxAttempts) {
    $ status = getJobstatus ($ jobid);

    jika ($ status === &#39;selesai&#39;) {
        echo "kejayaan! \ n";
        rehat;
    }

    jika ($ status === &#39;error&#39;) {
        echo "ralat kerja. \ n";
        rehat;
    }

    usleep (selang $);
    $ percubaan;
}

jika ($ percubaan === $ maxAttempts) {
    echo "pekerjaan tidak selesai dalam masa. \ n";
}

Nota akhir

Walaupun while usleep adalah mudah dan berfungsi dengan baik dalam skrip CLI (misalnya, pekerjaan Cron atau pekerja giliran), ia tidak sesuai untuk aplikasi web masa nyata . Untuk berskala yang lebih baik, pertimbangkan:

  • WebSockets (melalui Ratchet, Swoole, dll.)
  • Acara Server-Sent (SSE)
  • Pengundian Ajax sisi pelanggan
  • Broker Mesej (Rabbitmq, Kafka)

Tetapi untuk ringan, gaya segerak yang menunggu dalam skrip latar belakang, pengundian berasaskan usleep adalah penyelesaian praktikal dan mudah debug.

Pada asasnya, pastikan ia mudah, tetapkan had, dan elakkan pengundian.

Atas ialah kandungan terperinci Melaksanakan pengundian tugas tak segerak dengan php `sementara gelung dan` usleep`. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1596
276
Prestasi perangkap kompleks `sementara` keadaan gelung di php Prestasi perangkap kompleks `sementara` keadaan gelung di php Aug 03, 2025 pm 03:48 PM

MengelakkanRepeatedFunctionCallSinWhileLoopConditionSbyCachingResultSultsLikeCount () orstrlen (). $ offsettopreventredundantcalcula

Demystifying the `sementara ($ line = ...)` idiom in php Demystifying the `sementara ($ line = ...)` idiom in php Aug 05, 2025 am 09:20 AM

TheWhile ($ line = fgets ($ file)) coraknotatypobutadeliberateidiomwhereasSignmentReturnsTheasSignedValue, whoSisevaluatatedfor TruthinessIntHeloopCondition.2.TheloopContinuuSlongasfgets () ReturnSatruthyValue (iaitu, Avalidline, everifit'sanemptyor "0 & quo

PHP Loop Showdown: Bila memilih `sementara` over` for `dan` foreach` PHP Loop Showdown: Bila memilih `sementara` over` for `dan` foreach` Aug 04, 2025 am 03:09 AM

Usewhilewhenthenumberofiterationsisunknownanddependsonaruntimecondition,suchasreadingfromafileorstreamuntilcompletion.2.Useforwhentheiterationcountisknownandprecisecontrolovertheindexisneeded,includingcustomincrementsorreversetraversal.3.Useforeachwh

Melaksanakan pengundian tugas tak segerak dengan php `sementara gelung dan` usleep` Melaksanakan pengundian tugas tak segerak dengan php `sementara gelung dan` usleep` Aug 04, 2025 am 10:49 AM

Untuk melaksanakan pengundian negeri untuk tugas -tugas asynchronous dalam PHP, anda boleh menggunakan gelung sementara bersempena dengan fungsi usleep untuk pemeriksaan masa yang selamat. 1. Pelaksanaan Asas: Semak status tugas dengan memanggil Getjobstatus gelung, tetapkan bilangan maksimum percubaan (seperti 60 kali) dan masa selang (seperti 50ms), dan keluar dari gelung apabila tugas selesai, gagal atau tamat masa. 2. Tetapkan selang pengundian secara munasabah: disyorkan untuk menggunakan 100ms (100,000 microseconds) sebagai nilai awal untuk mengelakkan beban sistem atau terlalu lama yang mempengaruhi kelajuan tindak balas. 3. Amalan terbaik termasuk: bilangan maksimum percubaan mesti ditetapkan untuk mengelakkan gelung tak terhingga; Pengendalian kegagalan sementara seperti pengecualian rangkaian untuk mengelakkan gangguan pengundian; Log perlu direkodkan atau penurunan pemprosesan hendaklah dicetuskan apabila tamat masa; cuba mengelakkan w

Kuasa tugasan dalam `sementara` syarat untuk pengambilan pangkalan data Kuasa tugasan dalam `sementara` syarat untuk pengambilan pangkalan data Aug 03, 2025 pm 01:18 PM

PenggunaanSsignmentWithinwhileConditionShelpsreduceredundancyandImproverabilityWhenfetchingDatabaserows; 1) iteliminatesduplicatedFetchCallsbycombiningAssignmentandConditionCheck;

Memproses fail besar secara line-by-line menggunakan `sementara` dan` fget ' Memproses fail besar secara line-by-line menggunakan `sementara` dan` fget ' Aug 01, 2025 am 05:02 AM

Menggunakan sementara dan fgets () dapat memproses fail besar dengan cekap kerana kaedah ini membaca garis demi baris untuk mengelakkan limpahan ingatan; 1. Buka fail dan periksa sama ada pemegangnya sah; 2. Gunakan sementara gelung untuk menggabungkan fgets () untuk membaca garis demi baris; 3. Proses setiap baris data, seperti penapisan, pencarian atau penukaran; 4. Gunakan trim () untuk menghapuskan aksara ruang putih; 5. Tutup pemegang fail dalam masa; 6. Sesuaikan saiz penampan untuk mengoptimumkan prestasi; Berbanding dengan fail () Memuatkan keseluruhan fail pada satu masa, kaedah ini mempunyai penggunaan memori yang rendah, prestasi yang stabil, dan menyokong pemprosesan fail super besar. Ia sesuai untuk analisis log, penghijrahan data dan senario lain. Ia adalah cara yang disyorkan untuk memproses fail besar dengan selamat.

Menguruskan kebocoran memori dalam skrip php `sementara 'yang lama Menguruskan kebocoran memori dalam skrip php `sementara 'yang lama Aug 02, 2025 am 09:39 AM

Unsetlargevariablesafterusetopreventaccumulation; 2.callgc_collect_cycles () secara berkalaToHandLecirculararreferences; 3.avoidgrowingstaticorglobalarraysbyloggingexternallyorlimitingbufferssize;

See all articles