ฉันกำลังเขียนแอพ 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 โดยไม่ต้องรอให้เสร็จ เรียกดูรหัสการทดสอบ
มีวิธีที่ง่ายและใช้กันอย่างแพร่หลายในการทำงานแบบอะซิงโครนัสและรับการแจ้งเตือนเมื่องานเสร็จหรือไม่
async_call
ฟังก์ชั่นของคุณอาจเป็นสิ่งที่ฉันต้องการ คุณจะช่วยขยายความคิดออกไปเล็กน้อยและเพิ่มคำตอบเพื่อที่ฉันจะได้ยอมรับและให้เครดิตคุณหลังจากที่ฉันทดสอบ ขอบคุณ!