ฉันกำลังเปิดตัวกระบวนการใหม่ (แก้ไขสิ่งเดียวกันกับเธรดใหม่) สำหรับการคำนวณจากลูปเหตุการณ์ async กระบวนการใหม่นี้มีลูปเหตุการณ์ asyncio ของตัวเองที่ทำงานอยู่ และทำงานได้ดีโดยไม่มีพฤติกรรมการบล็อกใดๆ
ฉันสร้างสองคิว (multiprocessing.Queue
หรือ multiprocessing.Manager.Queue
) คิวหนึ่งสำหรับข้อความขาออก และอีกคิวสำหรับข้อความขาเข้า ฉันได้รับพฤติกรรมเดียวกันกับทั้งสองคิว คิวสำหรับข้อความขาออกทำงานได้ดี เนื่องจากฉันใส่/รับข้อความในคิวด้วย:
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)
อย่างไรก็ตาม เมื่อฉันพยายามเรียกใช้คำสั่ง get()
เดียวกันในแอปพลิเคชัน asyncio ดั้งเดิมของฉันโดยใช้คำสั่ง asyncio run_in_executor
มันก็ค้าง ลูปเหตุการณ์นั้นดูดีและตอบสนองได้ดี
การปิดใช้งานคิวการทำงานจะไม่เปลี่ยนแปลงสิ่งต่างๆ และผู้ดำเนินการก็ไม่เปลี่ยนแปลงเช่นกัน (ค่าเริ่มต้น เธรด หรือกระบวนการ)
ไอเดีย?