5
วิธีการทำงานแบบอะซิงโครนัสในแอพ Python GObject Introspection
ฉันกำลังเขียนแอพ Python + GObject ที่ต้องอ่านข้อมูลจำนวนเล็กน้อยจากดิสก์เมื่อเริ่มต้น ข้อมูลจะถูกอ่านแบบซิงโครนัสและใช้เวลาประมาณ 10 วินาทีในการดำเนินการอ่านให้เสร็จในช่วงเวลาที่การโหลด UI ล่าช้า ฉันต้องการเรียกใช้งานแบบอะซิงโครนัสและรับการแจ้งเตือนเมื่อพร้อมโดยไม่ปิดกั้น UI มากขึ้นหรือน้อยลงเช่น: def take_ages(): read_a_huge_file_from_disk() def on_finished_long_task(): print "Finished!" run_long_task(task=take_ages, callback=on_finished_long_task) load_the_UI_without_blocking_on_long_task() ฉันเคยใช้GTaskมาก่อนในเรื่องแบบนี้ แต่ฉันกังวลว่ารหัสของมันไม่ได้ถูกแตะต้องใน 3 ปีเลยก็ถูกส่งไปยัง GObject Introspection เพียงลำพัง สิ่งสำคัญที่สุดคือไม่มีใน Ubuntu 12.04 อีกต่อไป ดังนั้นฉันกำลังมองหาวิธีที่ง่ายในการทำงานแบบอะซิงโครนัสไม่ว่าจะเป็นแบบ Python มาตรฐานหรือในแบบมาตรฐาน GObject / GTK + แก้ไข: นี่คือรหัสบางส่วนพร้อมตัวอย่างของสิ่งที่ฉันพยายามทำ ฉันได้ลองpython-deferตามที่แนะนำในความคิดเห็น แต่ฉันไม่สามารถจัดการกับภารกิจที่มีความยาวแบบอะซิงโครนัสและปล่อยให้โหลด UI โดยไม่ต้องรอให้เสร็จ เรียกดูรหัสการทดสอบ มีวิธีที่ง่ายและใช้กันอย่างแพร่หลายในการทำงานแบบอะซิงโครนัสและรับการแจ้งเตือนเมื่องานเสร็จหรือไม่