Plumber: Timeout dengan permintaan yang lama

Dibuat pada 25 Agu 2016  ·  3Komentar  ·  Sumber: rstudio/plumber

Hai !

Kami membuat laporan panjang dalam PDF yang memakan waktu sekitar 3 menit dan kami memaparkannya melalui Plumber.
Koneksi HTTP ditutup sekitar 1 menit 40 detik (100 detik).

Jadi kami memiliki pesan kesalahan logis karena tukang ledeng mencoba mengirim data ke koneksi tertutup:
ERROR: [on_request_read] connection reset by peer

Saya pikir itu bisa terkait dengan # 12 dan omong-omong https://github.com/rstudio/httpuv/issues/49

Ada cara untuk memperbaikinya di Plumber? Mungkin dengan mengirimkan secara manual di Plumber sesuatu seperti itu:

Keep-Alive: timeout=300
Connection: Keep-Alive

Tetapi bagaimanapun juga kami ingin menghindari #12

Salam Hormat,
Emmanuel

Komentar yang paling membantu

Untuk berjaga-jaga jika ada yang menganggap masalah ini relevan: fork ing bekerja dengan cukup baik dan mudah dilakukan dengan paket parallel .

parallel <- function() {
    # Long running calculation here
    print("Sleeping...")
    Sys.sleep(10)
    print("Finished.")
    return(Sys.time())
}

#* <strong i="8">@get</strong> /parallel
parallelTest <- function() {
    parallel::mcparallel(parallel())
    return(TRUE)
}

Semua 3 komentar

Sayangnya saya tidak cukup akrab dengan internal httpuv untuk dapat berbicara dengan cerdas tentang mengapa ini bisa terjadi.

Namun, untuk mundur selangkah, pola yang biasa dilakukan saat melakukan tugas berumur panjang semacam ini di sistem lain adalah dengan segera menanggapi permintaan yang masuk dan kemudian memulai pekerjaan secara asinkron. Klien mendapatkan beberapa ID sebagai tanggapan atas permintaan asli dan kemudian dapat melakukan polling untuk mengetahui kapan itu selesai.

Sayangnya, R berulir tunggal jadi ini sedikit lebih rumit. Tetapi jika Anda cukup termotivasi, Anda dapat melihat fork dalam proses R (lihat paket paralel atau multicore) dan kemudian membuat laporan di cabang proses, membiarkan proses induk tersedia untuk menanggapi permintaan API (seperti klien yang melakukan polling untuk melihat apakah laporan mereka dibuat).

Hai,

Di sini, kami telah mengoptimalkan kode R kami sehingga sebenarnya tidak menjadi masalah. Tapi masalahnya bisa kembali dalam kasus lain. Jika saya menemukan solusi, saya akan kembali dan mempublikasikannya di sini.

Untuk berjaga-jaga jika ada yang menganggap masalah ini relevan: fork ing bekerja dengan cukup baik dan mudah dilakukan dengan paket parallel .

parallel <- function() {
    # Long running calculation here
    print("Sleeping...")
    Sys.sleep(10)
    print("Finished.")
    return(Sys.time())
}

#* <strong i="8">@get</strong> /parallel
parallelTest <- function() {
    parallel::mcparallel(parallel())
    return(TRUE)
}
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

trestletech picture trestletech  ·  5Komentar

david-cortes picture david-cortes  ·  3Komentar

rensa picture rensa  ·  4Komentar

Jube-Dev picture Jube-Dev  ·  3Komentar

jeffkeller87 picture jeffkeller87  ·  6Komentar