Hướng dẫn async await python vs javascript - async đang chờ python so với javascript

Khi Async gặp phải, thì hàm được gửi đến vòng lặp sự kiện và luồng chính có thể tiếp tục hoạt động.

Điều này là gần, nhưng không hoàn toàn đúng. Trong JavaScript, việc thực thi sẽ không dừng lại cho đến khi CallStack bị xóa - từ khóa đang chờ đợi sẽ đình chỉ việc thực hiện một chức năng cụ thể cho đến khi một sự kiện kích hoạt và trong thời gian đó, kiểm soát trở lại người gọi. Điều này có nghĩa là phần đầu tiên của bất kỳ chức năng async nào sẽ thực thi ngay khi nó được gọi (nó không được đưa ngay lập tức vào vòng lặp sự kiện) và sẽ chỉ tạm dừng ngay khi một await bị tấn công.

Để có được hành vi này trong Python, nghĩa là - cho phép chủ đề chính tiếp tục trong khi thực hiện các tác vụ trẻ, tùy chọn duy nhất là đa luồng/đa xử lý.

Sự khác biệt ở đây là theo mặc định, JavaScript luôn có một vòng lặp sự kiện và Python thì không. Nói cách khác, Python có công tắc bật/tắt cho lập trình không đồng bộ trong khi JavaScript không. Khi bạn chạy một cái gì đó như loop.run_forever(), về cơ bản, bạn sẽ bật vòng lặp sự kiện và việc thực thi sẽ không tiếp tục nơi bạn rời đi cho đến khi vòng lặp sự kiện bị tắt. .

Bạn đang hỏi liệu có cách nào để mã của bạn tiếp tục thực thi sau khi bắt đầu vòng lặp sự kiện không. Tôi khá chắc chắn câu trả lời là không, cũng không cần thiết. Bất cứ điều gì bạn muốn thực hiện sau khi vòng lặp sự kiện bắt đầu chỉ có thể được thực hiện trong vòng lặp sự kiện.

Nếu bạn muốn chương trình Python của mình hoạt động giống như JavaScript, thì điều đầu tiên bạn làm có thể là bắt đầu một vòng lặp sự kiện, và sau đó bất kỳ logic nào có thể được đặt trong nhiệm vụ đầu tiên mà vòng lặp sự kiện thực hiện. Trong JavaScript, tấm nồi hơi này về cơ bản xảy ra với bạn và mã nguồn của bạn thực sự là nhiệm vụ đầu tiên được xếp hàng trong vòng lặp sự kiện.

Update:

Bởi vì dường như có một số nhầm lẫn với cách Vòng lặp sự kiện JavaScript hoạt động, tôi sẽ cố gắng giải thích nó thêm một chút.

Hãy nhớ rằng một vòng lặp sự kiện chỉ đơn giản là một hệ thống, khi một số sự kiện nhất định xảy ra, một khối mã đồng bộ có thể được xếp hàng để chạy ngay khi luồng không bận.

Vì vậy, chúng ta hãy xem vòng lặp sự kiện làm gì cho một chương trình đơn giản như thế này:

// This async function will resolve
// after the number of ms provided has passed
const wait = ms => { ... }

async function main() {
  console.log(2)
  await wait(100)
  console.log(4)
}

console.log(1)
main()
console.log(3)

Khi JavaScript bắt đầu thực hiện chương trình trên, nó sẽ bắt đầu bằng một nhiệm vụ duy nhất xếp hàng trong hàng "chạy những thứ này khi bạn không bận" hàng đợi. Mục này là toàn bộ chương trình.

Vì vậy, nó sẽ bắt đầu ở đầu, xác định bất cứ điều gì cần được xác định, thực thi console.log(1), gọi chức năng chính, nhập vào nó và chạy console.log(2), gọi chờ () Trả lại một lời hứa mà sau đó chúng tôi await, tại thời điểm đó, chúng tôi ngay lập tức quay lại người gọi chính, Main không được chờ đợi nên việc thực thi tiếp tục console.log(3), cho đến khi cuối cùng chúng tôi hoàn thành ở cuối tệp. Toàn bộ đường dẫn đó (từ xác định các chức năng đến console.log(3)) là một nhiệm vụ duy nhất, không gây gián đoạn. Ngay cả khi một nhiệm vụ khác đã được xếp hàng, JavaScript sẽ không dừng lại để xử lý nhiệm vụ đó cho đến khi hoàn thành phần logic đồng bộ này.

Sau đó, bộ đếm thời gian đếm ngược của chúng tôi sẽ kết thúc và một nhiệm vụ khác sẽ đi vào hàng đợi của chúng tôi, điều này sẽ khiến chức năng chính () của chúng tôi tiếp tục thực hiện. Logic tương tự như trước khi áp dụng ở đây - đường dẫn thực thi của chúng tôi có thể nhập và thoát các hàm async khác và sẽ chỉ dừng lại khi nó đi đến cuối, trong trường hợp này, chức năng chính (thậm chí nhấn một từ khóa đang chờ không thực sự tạo ra dòng này Dừng logic đồng bộ, nó chỉ làm cho nó quay trở lại người gọi). Việc thực hiện một tác vụ duy nhất không dừng lại cho đến khi CallStack bị xóa và khi việc thực thi đang tiếp tục từ chức năng Async, mục đầu tiên của CallStack bắt đầu ở chức năng Async cụ thể đó.

Async/đang chờ của Python tuân theo các quy tắc tương tự, ngoại trừ thực tế là trong Python, vòng lặp sự kiện không chạy theo mặc định.

Tôi biết Python cơ bản và tôi đang học JavaScript.

Tôi đã đọc rằng mô -đun Async Python và khóa luồng và luồng để xử lý các tác vụ Async. Và việc thực hiện thường đồng thời và không song song. Tôi đã hiểu cái đó.

Bây giờ tôi đã đọc và tìm hiểu làm thế nào cơ chế hàng đợi sự kiện và hàng đợi nhiệm vụ được sử dụng để xử lý các nhiệm vụ không đồng bộ trong JavaScript. Tôi nghĩ rằng tôi có một ý tưởng về cách nó hoạt động.

** Vậy, việc triển khai không đồng bộ của Python sẽ so sánh như thế nào so với JavaScript? **

Tôi không có kinh nghiệm lập trình cuộc sống thực.

** Làm thế nào sự khác biệt thực hiện của họ cân nhắc khi đưa ra quyết định sử dụng khuôn khổ dựa trên ngôn ngữ nào? **

Vui lòng làm sáng tỏ cho tôi!

Có phải Python Async như JavaScript?

Khi bạn so sánh mã Async của Python và JavaScript, bạn có thể nghĩ rằng chúng rất giống nhau, vì cả hai đều sử dụng mẫu Async/AIDAIT. Trong thực tế, có một sự khác biệt đáng kể giữa hai, theo tôi, làm cho mô hình Async của JavaScript vượt trội hơn Python.there is a significant difference between the two, which in my opinion, makes the JavaScript async model superior to Python's.

Có Async đang chờ đợi trong Python không?

Gói Asyncio của Python (được giới thiệu trong Python 3.4) và hai từ khóa của nó, Async và chờ đợi, phục vụ các mục đích khác nhau nhưng kết hợp với nhau để giúp bạn tuyên bố, xây dựng, thực thi và quản lý mã không đồng bộ. , serve different purposes but come together to help you declare, build, execute, and manage asynchronous code.

Điểm của Async đang chờ đợi Python là gì?

Chúng thường được sử dụng cho các nhiệm vụ hợp tác và hành xử như máy phát điện Python.Hàm Async sử dụng từ khóa đang chờ đợi để biểu thị một coroutine.Khi sử dụng từ khóa đang chờ, Coroutines giải phóng luồng điều khiển trở lại vòng lặp sự kiện.Để chạy một coroutine, chúng ta cần lên lịch cho vòng lặp sự kiện.to denote a coroutine. When using the await keyword, coroutines release the flow of control back to the event loop. To run a coroutine, we need to schedule it on the event loop.

Sự khác biệt giữa Async và đang chờ đợi trong JavaScript là gì?

Từ khóa Async được sử dụng để xác định hàm không đồng bộ, trả về một đối tượng không đồng bộ.Từ khóa đang chờ được sử dụng để tạm dừng thực thi chức năng Async cho đến khi một lời hứa được thực hiện, được giải quyết hoặc từ chối và để tiếp tục thực thi hàm async sau khi hoàn thành.