Dokumentasi Drupal 7 memperkenalkan Batch API sebagai:
Fungsi memungkinkan pemrosesan formulir tersebar di beberapa permintaan halaman, sehingga memastikan pemrosesan tidak terganggu karena batas waktu PHP ...
Saya menganggap ini berarti bahwa Batch menangani masalah terkait waktu tunggu untuk pengembang.
Namun, postingan lain (mis. Bagaimana API batch bekerja secara internal? ) Menyiratkan bahwa itu adalah tanggung jawab pengembang untuk memberi tahu Batch berapa banyak pekerjaan yang harus dilakukan sebelum menunggu pengguna lain tiba dan Batch akan dipanggil lagi --- sehingga menghindari waktu habis.
Jika yang terakhir benar maka saya berasumsi Batch tidak menjamin bahwa pekerjaan tidak akan berakhir. Apakah Batch memberikan jaminan? Apakah terserah pengembang untuk menebak berapa banyak Batch dapat diproses sebelum waktu habis?
Terima kasih!
sumber
Jawaban:
Batch hanya mengatakan, "Saya akan melakukan sejumlah N hal (paling banyak) dan kemudian melakukan refresh halaman ... dan melakukan lebih banyak."
Jika Anda mengatakan lakukan 5 item per potongan pekerjaan yang masing-masing membutuhkan waktu 5 detik, Anda akan baik-baik saja dengan nilai batas waktu php default 30 detik.
Jika Anda mengatakan lakukan 20 item per potongan pekerjaan yang masing-masing membutuhkan waktu 5 detik, beban kerja Anda per permintaan terlalu tinggi dan kemungkinan akan habis.
Ingatlah saat Anda menggunakan PHP dalam siklus hidup sebuah halaman
request in -> response out
. Dan bahwa server web Anda menjaga setiap utas tetap hidup untuk waktu yang terbatas. Anda harus mengatasi batas waktu itu - yang mana Batch API membantu Anda melakukannya.Menjalankan hal-hal dari katakan Drush, sisi server menggunakan modul komunitas seperti Migrasi dapat membantu Anda sepenuhnya menghindari timeout jika perlu.
EDIT
Juga perhatikan bahwa setiap permintaan halaman adalah bootstrap drupal penuh dan Batch API memilih dari yang sebelumnya ditinggalkan. Itu adalah salah satu operasi paling mahal saat menggunakan Batch API, memuat ulang drupal setiap N item. Itu sebabnya orang telah bekerja pada teknik sisi server untuk membuat node, mengimpor konten, dll. Batch API sangat bagus untuk tugas yang sederhana dan berulang. Tetapi cenderung berantakan dalam kumpulan data yang kompleks, atau sangat besar.
sumber
API batch hanya mendaftar
_batch_shutdown()
sebagai fungsi shutdownregister_shutdown_function()
. Fungsi itu hanya menyimpan dalam tabel database status saat ini dari batch yang dieksekusi.API Batch tidak memberikan jaminan apa pun bahwa operasi yang Anda lakukan tidak terganggu di tengah. Itulah sebabnya operasi batch biasanya menjalankan operasi sederhana seperti membaca baris database dari menyimpan tabel, dan menyimpan baris database di tabel lain.
sumber