Tôi đang viết một ứng dụng Python + GObject cần đọc một lượng dữ liệu không hề nhỏ từ đĩa khi bắt đầu. Dữ liệu được đọc đồng bộ và mất khoảng 10 giây để hoàn thành thao tác đọc, trong thời gian đó, quá trình tải UI bị trì hoãn.
Tôi muốn chạy tác vụ không đồng bộ và nhận thông báo khi nó sẵn sàng, mà không chặn UI, ít nhiều như:
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()
Tôi đã sử dụng GTask trong quá khứ cho loại điều này, nhưng tôi lo ngại rằng mã của nó đã bị chạm trong 3 năm, chứ chưa nói đến việc chuyển sang GObject Introspection. Quan trọng nhất, nó không còn có sẵn trong Ubuntu 12.04. Vì vậy, tôi đang tìm kiếm một cách dễ dàng để chạy các tác vụ không đồng bộ, theo cách tiêu chuẩn của Python hoặc theo cách tiêu chuẩn GObject / GTK +.
Chỉnh sửa: đây là một số mã với một ví dụ về những gì tôi đang cố gắng làm. Tôi đã cố gắng python-defer
như được đề xuất trong các nhận xét, nhưng tôi không thể quản lý để chạy tác vụ dài một cách không đồng bộ và để giao diện người dùng tải mà không phải đợi nó hoàn thành. Duyệt mã kiểm tra .
Có cách nào dễ dàng và được sử dụng rộng rãi để chạy các tác vụ không đồng bộ và được thông báo khi chúng kết thúc không?
async_call
chức năng của bạn có thể là những gì tôi cần. Bạn có muốn mở rộng về nó một chút và thêm một câu trả lời, để tôi có thể chấp nhận nó và ghi có cho bạn sau khi tôi kiểm tra nó không? Cảm ơn!