Saya meluncurkan proses baru (edit hal yang sama berlaku untuk thread baru) untuk komputasi dari loop peristiwa asinkron. Proses baru ini menjalankan loop peristiwa asyncio-nya sendiri dan berjalan dengan baik tanpa perilaku pemblokiran apa pun.
Saya membuat dua antrian (multiprocessing.Queue
atau multiprocessing.Manager.Queue
), satu untuk pesan keluar, dan satu lagi untuk pesan masuk. Saya mendapatkan perilaku yang sama dengan kedua antrian. Antrian untuk pesan keluar berfungsi dengan baik, karena saya memasukkan/menerima pesan ke dalam antrian dengan:
await asyncio.get_running_loop().run_in_executor(None, self.incoming_queue.put, msg)
msg = await asyncio.get_running_loop().run_in_executor(None, self.incoming_queue.get, True, 1)
Namun, ketika saya mencoba menjalankan perintah get()
yang sama di aplikasi asyncio asli saya menggunakan perintah asyncio run_in_executor
, perintah itu hang. Perulangan acara itu sendiri tampak baik-baik saja dan responsif.
Menonaktifkan antrian kerja tidak mengubah banyak hal, begitu pula eksekutor (default, thread, atau proses).
Ide ide?