cuốn sách gpt4 ai đã làm

Coroutine, asyncio, lập trình không đồng bộ

In lại Tác giả: Người biết Thời gian cập nhật: 2024-03-13 05:02:02 29 4
mua khóa gpt4 Nike

1 coroutine

Coroutine không phải do hệ điều hành cung cấp mà do các lập trình viên cung cấp một cách giả tạo (công nghệ chuyển ngữ cảnh chế độ người dùng)

Coroutine hay còn gọi là micro-threading là công nghệ chuyển ngữ cảnh ở chế độ người dùng. Nói tóm lại, nó thực sự triển khai các khối mã chuyển đổi giữa các lần thực thi thông qua một luồng.

Một số cách để triển khai coroutine:

  • greenlet, mô-đun đầu tiên
  • từ khóa năng suất
  • trình trang trí asynco (py3.4)
  • không đồng bộ, chờ từ khóa (py3.5) (được khuyến nghị)

Ý nghĩa của coroutine
Trong một thread, nếu gặp phải thời gian chờ IO, thread sẽ không chờ và sử dụng thời gian nhàn rỗi để làm việc khác.

2 Lập trình không đồng bộ

3.1 Vòng lặp sự kiện

Hiểu các vòng lặp vi vô hạn để phát hiện và thực thi một số mã nhất định

import asyncio # Tạo hoặc nhận vòng lặp sự kiện loop = asyncio.get_event_loop() # Đặt tác vụ vào danh sách tác vụ loop.run_until_complete(task)

3.2 không đồng bộ

Hàm coroutine: khi định nghĩa hàmtên hàm def async
Đối tượng coroutine: Thực thi hàm coroutine() để lấy đối tượng coroutine

# Đối tượng Coroutine async def func(): pass # Nội dung không được thực thi # Kết quả đối tượng Coroutine = func()

Lưu ý: Việc thực thi hàm coroutine sẽ tạo ra một đối tượng coroutine và mã bên trong hàm sẽ không được thực thi.

Mã nội bộ của hàm xử lý vòng lặp sự kiện

import asyncio # Đối tượng Coroutine async def func(): pass # Nội dung không được thực thi # Đối tượng Coroutine result = func() # Thêm sự kiện để giúp thực thi mã bên trong của hàm py3.4 #loop = asyncio.get_event_loop() # loop.run_until_complete (kết quả) # py3.7 asycio.run(kết quả)

3.3 đang chờ đợi

chờ đợi + đối tượng có thể chờ đợi (đối tượng coroutine, Tương lai, Nhiệm vụ)

Chờ đợi là chờ giá trị của đối tượng nhận được kết quả trước khi tiếp tục.

Trường hợp 1:

import asyncio async def func(): print("666") # Đợi 2 giây ở đây, có tác vụ khác thực hiện tác vụ khác rồi tiếp tục thực hiện ngược res = chờ asyncio.sleep(2) print("End", res) asyncio .run(func())

Trường hợp 2:

import asyncio async def else(): print("start") đang chờ asyncio.sleep(2) print("end") return "giá trị trả về" async def func(): print("Thực thi mã nội bộ của hàm coroutine") # Khi gặp một thao tác IO, coroutine (tác vụ) hiện tại sẽ bị tạm dừng và quá trình thực thi vẫn tiếp tục sau khi thao tác IO hoàn tất. # Khi coroutine hiện tại bị treo, vòng lặp sự kiện có thể thực thi các coroutine (tác vụ) khác res = chờ người khác() print("Yêu cầu IO đã kết thúc, kết quả là: ", res) asyncio.run(func())

Trường hợp ba

import asyncio async def else(): print("start") đang chờ asyncio.sleep(2) print("end") return "giá trị trả về" async def func(): print("Thực thi mã nội bộ của hàm coroutine") # Khi gặp một thao tác IO, coroutine (tác vụ) hiện tại sẽ bị tạm dừng và quá trình thực thi vẫn tiếp tục sau khi thao tác IO hoàn tất. # Khi coroutine hiện tại bị treo, vòng lặp sự kiện có thể thực thi các coroutine (tác vụ) khác res1 = chờ đợi người khác() print("Yêu cầu IO kết thúc, kết quả là: ", res1) res2 = chờ đợi người khác() print("IO request Cuối cùng, kết quả là: ", res2) asyncio.run(func())

3.4 Đối tượng nhiệm vụ

  • py3.7
  • Thêm nhiều nhiệm vụ vào vòng lặp sự kiện
  • Tác vụ được sử dụng để lập kế hoạch đồng thời cho các coroutine, thông quaasyncio.create_task (đối tượng coroutine)Tạo một đối tượng Love You Task theo cách này để có thể thêm coroutine vào vòng lặp sự kiện và chờ lên lịch thực thi. Ngoài việc sử dụngasyncio.create_task()Ngoài các chức năng, bạn cũng có thể sử dụng cấp độ thấp hơnloop_create_task()hoặcđảm bảo_future()chức năng. Không nên khởi tạo các đối tượng Task một cách thủ công.

Địa chỉ tham khảo:
https://www.bilibili.com/video/BV1dD4y127bD

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress