Hướng dẫn what is asynchronous python? - python không đồng bộ là gì?
Phần I của bài viết: https://viblo.asia/p/python-sleep-how-to-add-time-delays-to-your-code-part-i-translated-6J3ZgP6glmB Phần II của bài viết: https://viblo.asia/p/python-sleep-cach-them-do-tre-vao-chuong-trinh-phan-ii-translated-ORNZq1O3Z0n Adding a Python sleep() Call With Async IOKhả năng bất đồng bộ đã được thêm vào Python 3.4 và tập tính năng này ngày càng được phát triển mạnh mẽ. Lập trình bất đồng bộ là một kiểu lập trình song song cho phép bạn chạy đa tác vụ cùng một lúc. Khi một tác vụ hoàn thành, nó sẽ thông báo về thread chính.
Đây là một ví dụ từ documentation của chính Python:
Trong ví dụ này, bạn chạy Còn đây là một ví dụ hấp dẫn hơn từ phần documentation Coroutines and Tasks:
Trong đoạn code này, bạn tạo ra worker 0 nhận số giây 1 để ngủ và 2 để in ra. Sau đó, bạn sử dụng từ khóa 3 để chờ hàm 0 chạy. 3 bắt buộc phải có vì 0 đã được đánh dấu là một hàm 7, vậy nên bạn không thể gọi nó giống như với hàm thông thường.Khi nào bạn chạy đoạn code, chương trình sẽ xử lý 3 ba lần. Đoạn code sẽ chờ 1, 2 và 3 giây, tổng cộng là 6 giây. Bạn có thể viết lại đoạn code để các tác vụ chạy song song:
Bạn đang sử dụng khái niệm về các task mà bạn có thể tạo với 9. Khi bạn sử dụng task trong asyncio , Python sẽ chạy các task bất đồng bộ. Do vậy, khi bạn chạy đoạn code bên trên, nó sẽ hoàn thành trong 3 giây thay vì 6.Adding a Python sleep() Call With GUIsCác ứng dụng command line không phải là nơi duy nhất bạn có thể cần sử dụng hàm Code GUI sẽ chạy các công việc xử lý và vẽ trong thread chính gọi là event loop. Nếu bạn sử dụng 3 trong code GUI, bạn sẽ block event loop. Ở khía cạnh nghĩa dùng, ứng dụng có thể treo. Người dùng không thể tương tác với ứng dụng trong khi nó ngủ với phương thức này. Trên Windows, bạn thậm chí có thể nhận được một cảnh báo.event loop. Nếu bạn sử dụng 3 trong code GUI, bạn sẽ block event loop. Ở khía cạnh nghĩa dùng, ứng dụng có thể treo. Người dùng không thể tương tác với ứng dụng trong khi nó ngủ với phương thức này. Trên Windows, bạn thậm chí có thể
nhận được một cảnh báo.May thay, có các phương thức khác bạn có thể sử dụng bên trong 3. Trong các phần tiếp theo, bạn sẽ tìm hiểu cách thêm lời gọi sleep() trong cả Tkinter và wxPython.Sleeping in TkinterNguồn: https://realpython.com/python-sleep/ 6 thuộc thư viện chuẩn của Python. Nó có thể không có sẵn nếu bạn đang dùng Python phiên bản cài đặt sẵn trên Linux và Mac. Nếu bạn gặp lỗi 7 thì bạn cần tìm cách thêm nó vào hệ thống. Nhưng nếu bạn tự cài đặt Python, 6 sẽ sẵn sàng để sử dụng.Bạn sẽ bắt đầu với ví dụ sử dụng 3. Chạy đoạn code này để xem điều gì xảy ra khi bạn thêm lệnh gọi sleep() sai cách:
Một khi bạn chạy đoạn code trên, ấn nút trong GUI. Nút bấm sẽ khựng lại trong ba giây vì nó chờ Để khiến 6 ngủ đúng cách, bạn cần sử dụng 3:
Ở đây, bạn tạo ra một ứng dụng có kích thước 400 x 400, không chứa widget. Tất cả những gì nó làm là hiển thị một frame. Sau đó, bạn gọi 4 mà ở đó 5 tham chiếu tới đối tượng 6 nhận hai tham trị:
Trong trường hợp này, ứng dụng của bạn sẽ in ra một chuỗi ra stdout sau 3 giây. Bạn có thể coi 3 như là 3 phiên bản 6 nhưng nó cũng có thể khả năng gọi một hàm sau khi việc ngủ kết thúc.Bạn có thể sử dụng chức năng này để cải thiện UX (trải nghiệm người dùng). Bằng cách thêm một lệnh gọi Sleeping in wxPythonCó hai khác biệt chính giữa 1 và 2:
Framework 1 không được tích hợp sẵn vào Python vậy nên bạn phải tự tải chúng về. Nếu bạn không quan về 1, hãy kiểm tra How to Build a Python GUI Application With wxPython.Trong 7, bạn có thể sử dụng 8 để thêm một lời gọi sleep() :
Ở đây, bạn thực hiện kế thừa trực tiếp và sau đó gọi 8. Hàm này nhận các tham số giống 3 của Tkinter:
Khi bạn chạy đoạn code này, bạn sẽ thấy một cửa sổ trắng (blank) xuất hiện mà không có bất cứ widget nào. Sau 4 giây, bạn sẽ thấy chuỗi "I was delayed" được in ra stdout. Một trong những lợi ích của việc sử dụng 8 chính là thread-safe. Bạn có thể sử dụng phương thức này từ một thread để gọi một hàm ở trong ứng dụng 1Loạt bài viết xin được kết thúc tại đây! Nguồn: https://realpython.com/python-sleep/ |