Bởi vì tất cả các chức năng quy trình con của asyncio đều không đồng bộ và asyncio cung cấp nhiều công cụ để làm việc với các chức năng đó, nên rất dễ thực hiện và giám sát nhiều quy trình con song song. Việc sửa đổi ví dụ trên để chạy một số lệnh đồng thời là chuyện nhỏ
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]
Xem thêm phần Ví dụ
Tạo quy trình con¶
coroutine asyncio. create_sub process_exec[chương trình , *args, stdin=None, stdout=None, stderr=None, limit=None, **kwds]¶Tạo một quy trình con
Đối số giới hạn đặt giới hạn bộ đệm cho các trình bao bọc
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory7 cho
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory8 và
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory9 [nếu
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory0 được truyền cho các đối số thiết bị xuất chuẩn và thiết bị xuất chuẩn]
Trả về một phiên bản
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory1
Xem tài liệu của
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory2 để biết các tham số khác
Đã thay đổi trong phiên bản 3. 10. Đã xóa tham số vòng lặp.
coroutine asyncio. create_sub process_shell[cmd , stdin=None, stdout=None, stderr=None, limit=None, **kwds]¶Chạy lệnh shell cmd
Đối số giới hạn đặt giới hạn bộ đệm cho các trình bao bọc
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory7 cho
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory8 và
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory9 [nếu
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory0 được truyền cho các đối số thiết bị xuất chuẩn và thiết bị xuất chuẩn]
Trả về một phiên bản
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory1
Xem tài liệu của
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory5 để biết các thông số khác
Quan trọng
Ứng dụng có trách nhiệm đảm bảo rằng tất cả các khoảng trắng và ký tự đặc biệt được trích dẫn một cách thích hợp để tránh các lỗ hổng shell injection. Hàm
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory6 có thể được sử dụng để thoát đúng khoảng trắng và các ký tự shell đặc biệt trong các chuỗi sẽ được sử dụng để tạo các lệnh shell
Đã thay đổi trong phiên bản 3. 10. Đã xóa tham số vòng lặp.
Ghi chú
Các quy trình con khả dụng cho Windows nếu sử dụng
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory7. Xem Hỗ trợ quy trình con trên Windows để biết chi tiết.
Xem thêm
asyncio cũng có các API cấp thấp sau đây để hoạt động với các quy trình con.
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory2,
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory5,
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]0,
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]1, cũng như Vận chuyển quy trình con và Giao thức quy trình con.
Hằng số¶
không đồng bộ. quy trình con. ỐNG ỐNG ¶Có thể được chuyển đến các tham số stdin, stdout hoặc stderr
Nếu PIPE được truyền cho đối số stdin, thuộc tính
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]2 sẽ trỏ đến một thể hiện
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]3
Nếu PIPE được truyền cho các đối số stdout hoặc stderr, các thuộc tính
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory8 và
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory9 sẽ trỏ đến các trường hợp
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory7không đồng bộ. quy trình con. STDOUT ¶
Giá trị đặc biệt có thể được sử dụng làm đối số chuẩn và chỉ ra rằng lỗi tiêu chuẩn sẽ được chuyển hướng thành đầu ra tiêu chuẩn
không đồng bộ. quy trình con. DEVNULL ¶Giá trị đặc biệt có thể được sử dụng làm đối số stdin, stdout hoặc stderr để xử lý các hàm tạo. Nó chỉ ra rằng tệp đặc biệt
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]7 sẽ được sử dụng cho luồng quy trình con tương ứng
Tương tác với các quy trình con¶
Cả hai hàm
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]8 và
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]9 đều trả về các thể hiện của lớp Process. Quy trình là trình bao bọc cấp cao cho phép giao tiếp với các quy trình con và theo dõi quá trình hoàn thành của chúnglớp không đồng bộ. quy trình con. Quy trình ¶
Một đối tượng bao bọc các quy trình của hệ điều hành được tạo bởi các hàm
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]8 và
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]9
Lớp này được thiết kế để có API tương tự như lớp
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory42, nhưng có một số điểm khác biệt đáng chú ý
không giống như Popen, các phiên bản Quy trình không có phương thức tương đương với phương thức
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory
43;các phương thức
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory
44 và['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory
45 không có tham số thời gian chờ. sử dụng chức năng['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory
46;phương thức
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory
47 không đồng bộ, trong khi phương thức['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory
48 được triển khai dưới dạng vòng lặp bận chặn;tham số universal_newlines không được hỗ trợ
Lớp này không phải luồng an toàn .
Cũng xem phần Quy trình con và Chủ đề .
quy trình đợi[] ¶Đợi quá trình con kết thúc
Đặt và trả về thuộc tính
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory49
Ghi chú
Phương pháp này có thể bế tắc khi sử dụng
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory70 hoặc
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory71 và quy trình con tạo ra nhiều đầu ra đến mức nó chặn chờ bộ đệm đường ống của hệ điều hành chấp nhận thêm dữ liệu. Sử dụng phương pháp
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory44 khi sử dụng đường ống để tránh tình trạng nàycoroutine giao tiếp[đầu vào=None]¶
Tương tác với quy trình
gửi dữ liệu tới stdin [nếu đầu vào không phải là
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory
73];đọc dữ liệu từ thiết bị xuất chuẩn và thiết bị xuất chuẩn cho đến khi đạt được EOF;
đợi quá trình kết thúc
Đối số đầu vào tùy chọn là dữ liệu [đối tượng ____274] sẽ được gửi đến tiến trình con
Trả về một tuple
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory75
Nếu một trong hai ngoại lệ
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory76 hoặc
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory77 được đưa ra khi ghi đầu vào vào stdin, thì ngoại lệ đó sẽ bị bỏ qua. Tình trạng này xảy ra khi quá trình thoát trước khi tất cả dữ liệu được ghi vào stdin
Nếu muốn gửi dữ liệu đến stdin của quy trình, quy trình cần được tạo bằng
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory78. Tương tự, để lấy bất kỳ thứ gì khác ngoài
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory73 trong bộ dữ liệu kết quả, quy trình phải được tạo với các đối số
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory70 và/hoặc
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory71
Lưu ý rằng dữ liệu đọc được lưu vào bộ nhớ đệm, vì vậy không sử dụng phương pháp này nếu kích thước dữ liệu lớn hoặc không giới hạn
send_signal[signal] ¶Gửi tín hiệu tín hiệu cho tiến trình con
Ghi chú
Trên Windows,
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory82 là bí danh của
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory83.
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory84 và
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory85 có thể được gửi đến các quy trình bắt đầu bằng tham số creationflags bao gồm
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory86chấm dứt[] ¶
Dừng tiến trình con
Trên các hệ thống POSIX, phương thức này sẽ gửi
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory87 tới tiến trình con
Trên Windows, hàm API Win32
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory88 được gọi để dừng tiến trình congiết[] ¶
Giết tiến trình con
Trên các hệ thống POSIX, phương thức này sẽ gửi
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory89 tới quy trình con
Trên Windows, phương thức này là bí danh của
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory83
Luồng đầu vào tiêu chuẩn [
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]3] hoặc
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory73 nếu quy trình được tạo bằng
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory93stdout ¶
Luồng đầu ra tiêu chuẩn [
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory7] hoặc
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory73 nếu quy trình được tạo bằng
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory96stderr ¶
Luồng lỗi tiêu chuẩn [
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory7] hoặc
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory73 nếu quy trình được tạo bằng
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory99
Cảnh báo
Sử dụng phương pháp
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory44 thay vì
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory01,
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory02 hoặc
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory03. Điều này tránh bế tắc do các luồng tạm dừng đọc hoặc ghi và chặn tiến trình conpid ¶
Số nhận dạng quy trình [PID]
Lưu ý rằng đối với các quy trình được tạo bởi hàm
async def main[]: await asyncio.gather[ run['ls /zzz'], run['sleep 1; echo "hello"']] asyncio.run[main[]]9, thuộc tính này là PID của trình bao được sinh ramã trả về ¶
Mã trả về của quá trình khi nó thoát
Giá trị
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory73 chỉ ra rằng quá trình vẫn chưa kết thúc
Giá trị âm
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory06 cho biết rằng trẻ đã bị chấm dứt bởi tín hiệu
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory07 [chỉ POSIX]
Quy trình con và Chủ đề¶
Theo mặc định, vòng lặp sự kiện asyncio tiêu chuẩn hỗ trợ chạy các quy trình con từ các luồng khác nhau
Trên các quy trình con của Windows chỉ được cung cấp bởi
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory7 [mặc định],
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory09 không có hỗ trợ quy trình con
Trên UNIX, trình theo dõi con được sử dụng để chờ kết thúc quy trình con, hãy xem Trình theo dõi quy trình để biết thêm thông tin.
Đã thay đổi trong phiên bản 3. 8. UNIX đã chuyển sang sử dụng
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory10 để sinh ra các quy trình con từ các luồng khác nhau mà không có bất kỳ giới hạn nào.
Sinh ra một quy trình con với trình theo dõi trẻ em hiện tại không hoạt động sẽ tăng
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory11
Lưu ý rằng việc triển khai vòng lặp sự kiện thay thế có thể có những hạn chế riêng;
Xem thêm
Phần Đồng thời và đa luồng trong asyncio .
Ví dụ¶
Một ví dụ sử dụng lớp
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory1 để kiểm soát một quy trình con và lớp
['ls /zzz' exited with 1] [stderr] ls: /zzz: No such file or directory7 để đọc từ đầu ra tiêu chuẩn của nó