Hướng dẫn threading stack size python - threading stack size python

Tôi có một chương trình Python sử dụng DLL được xây dựng tùy chỉnh. DLL này bị sập do tràn chồng. Tràn tràn này không phải là do hàm đệ quy trở nên tồi tệ, mà là phân bổ lớn trên ngăn xếp bằng alloca ().

Chạy ví dụ dẫn đến một giá trịerror.

Mô -đun chủ đề Python cho phép bạn chỉ định kích thước ngăn xếp mới cho các luồng mới. Hãy thử đặt nó thành một giá trị mà bạn cảm thấy là đủ lớn, và sau đó thực hiện công việc của DLL này trong một luồng mới.

Như đã lưu ý trong một số câu hỏi liên quan như ở đây, thường không phải là một ý tưởng tốt để chơi với kích thước ngăn xếp để mở rộng độ sâu đệ quy, nhưng đây là mã cho thấy cách phát triển ngăn xếp theo hiệu ứng đó. Với Python 3.5, trên hệ thống Windows 10 x64, nó cho thấy một đệ quy rất sâu thường không thể (giới hạn đệ quy được phép thường trong tình huống của tôi dường như là 993). Tôi không biết ngăn xếp thực sự lớn như thế nào đối với ví dụ này, nhưng, trên máy của tôi, với một nửa kích thước được chỉ định bên dưới, Python gặp sự cố.

4.096 * 16 = 65,536 byte

Nếu DLL là tùy chỉnh, thì bạn không thể phân bổ trên đống thay vì xếp (hoặc phân bổ tĩnh, nếu thích hợp) và dừng vấn đề theo cách đó?

Thay đổi kích thước ngăn xếp luồng thành giá trị không được hỗ trợ sẽ dẫn đến giá trịerror.

Chỉnh sửa: Sửa lỗi - Python cho phép cài đặt kích thước ngăn xếp khi tạo các luồng mới (xem Thread.stack_size) Correction - Python does allow for setting the stack size when creating new threads (see thread.stack_size)

Cập nhật lần cuối vào ngày 12 tháng 9 năm 2022

Bạn có thể truy xuất và thay đổi kích thước ngăn xếp luồng thông qua chức năng rening.stack_size ().read stack size via the threading.stack_size() function.

Trong hướng dẫn này, bạn sẽ khám phá cách định cấu hình kích thước ngăn xếp luồng trong Python.thread stack size in Python.

Bắt đầu nào.

  • Kích thước ngăn xếp chủ đề là gì
  • Tại sao thay đổi kích thước ngăn xếp luồng
  • Cách lấy kích thước ngăn xếp chủ đề
  • Cách đặt kích thước ngăn xếp luồng
  • Ví dụ về việc thiết lập kích thước ngăn xếp luồng
    • Đặt kích thước ngăn xếp luồng tối thiểu
    • Tăng kích thước ngăn xếp luồng
    • Đặt kích thước ngăn xếp luồng không hợp lệ
  • Đọc thêm
  • Takeaways

Kích thước ngăn xếp chủ đề là gì

Tại sao thay đổi kích thước ngăn xếp luồng

Cách lấy kích thước ngăn xếp chủ đề

Cách đặt kích thước ngăn xếp luồng

Ví dụ về việc thiết lập kích thước ngăn xếp luồng

Đặt kích thước ngăn xếp luồng tối thiểu

Tăng kích thước ngăn xếp luồng

Mã Python được biên dịch khi chạy vào mã Bytecy Python và được thực thi trong máy ảo Python.

Mã nguồn Python được biên dịch thành mã byte, biểu diễn nội bộ của chương trình Python trong trình thông dịch CPython. .

- Bytecode, chú giải Python.

Các byte python được thực thi bằng cấu trúc dữ liệu ngăn xếp thêm các hướng dẫn dưới dạng các chức năng được gọi và các hướng dẫn POPS khi chúng được thực thi, ví dụ: một cái gọi là máy xếp chồng.

Mỗi chủ đề Python sẽ có ngăn xếp các hướng dẫn riêng được duy trì và thực thi. Run your loops in parallel (using all CPUs)
Learn how by downloading my FREE ebook: Parallel Loops in Python

Tại sao thay đổi kích thước ngăn xếp luồng

Cách lấy kích thước ngăn xếp chủ đề

Cách đặt kích thước ngăn xếp luồng

Ví dụ về việc thiết lập kích thước ngăn xếp luồng

Đặt kích thước ngăn xếp luồng tối thiểu

Tăng kích thước ngăn xếp luồng

Mã Python được biên dịch khi chạy vào mã Bytecy Python và được thực thi trong máy ảo Python.

Mã nguồn Python được biên dịch thành mã byte, biểu diễn nội bộ của chương trình Python trong trình thông dịch CPython. .

- Bytecode, chú giải Python.

Bây giờ chúng ta có một số ý tưởng về lý do tại sao chúng ta có thể điều chỉnh kích thước ngăn xếp, hãy để xem xét cách chúng ta có thể làm điều này.

Bị nhầm lẫn bởi API mô -đun luồng? Tải xuống bảng cheat pdf miễn phí của tôi
Download my FREE PDF cheat sheet

Cách lấy kích thước ngăn xếp chủ đề

Kích thước ngăn xếp luồng có thể được truy xuất bằng cách sử dụng chức năng rening.stack_size ().threading.stack_size() function.

Ví dụ:

.....

# Nhận kích thước ngăn xếp

size=threading.sstack_size()=threading.sstack_size()

Lưu ý, hàm renthing.stack_size () là từ đồng nghĩa hoặc bí danh cho hàm _thread.stack_size ().threading.stack_size() function is a synonym or alias for the _thread.stack_size() function.

Gọi chức năng rening.stack_size () sẽ trả về kích thước ngăn xếp được sử dụng bởi trình thông dịch Python khi tạo các luồng mới.threading.stack_size() function will return the stack size used by the Python interpreter when creating new threads.

Trả về kích thước ngăn xếp luồng được sử dụng khi tạo các luồng mới.

-Chủ đề-Song song dựa trên luồng

Chức năng lấy một đối số có tên là kích thước, đó là tùy chọn. Nếu không được chỉ định, nó sẽ được đặt thành 0, điều này sẽ khiến hàm trả về kích thước ngăn xếp luồng mặc định.size” which is optional. If not specified, it will be set to 0, which will cause the function to return the default thread stack size.

Nếu kích thước không được chỉ định, 0 được sử dụng.

-Chủ đề-Song song dựa trên luồng

Chức năng lấy một đối số có tên là kích thước, đó là tùy chọn. Nếu không được chỉ định, nó sẽ được đặt thành 0, điều này sẽ khiến hàm trả về kích thước ngăn xếp luồng mặc định.

Nếu kích thước không được chỉ định, 0 được sử dụng.

Ví dụ dưới đây cho thấy cách lấy kích thước ngăn xếp luồng mặc định.

# SuperfastPython.comthreading import stack_size

# Ví dụ về việc lấy kích thước ngăn xếp luồng

size=stack_size()=stack_size()

print(size)(size)

Từ việc nhập luồng stack_size

# Nhận kích thước ngăn xếp mặc định


Chạy ví dụ truy xuất và báo cáo kích thước ngăn xếp luồng mặc định.

Trong trường hợp này, chúng ta có thể thấy rằng giá trị của số 0 được trả về và báo cáo, điều này chỉ ra rằng mặc định cho hệ điều hành đang được sử dụng.

Cần trợ giúp với việc xâu chuỗi trăn?

Đăng ký khóa học email 7 ngày miễn phí của tôi và khám phá cách sử dụng mô-đun luồng Python, bao gồm cách tạo và bắt đầu các chủ đề mới, cách sử dụng Mutex và Semaphore, và nhiều hơn nữa!
 


Nhấp vào nút bên dưới và nhập địa chỉ email của bạn để đăng ký và nhận bài học đầu tiên ngay bây giờ.

Bắt đầu khóa học email miễn phí của bạn ngay bây giờ! & NBSP;threading.stack_size() function, the same function for getting the thread stack size.

Cách đặt kích thước ngăn xếp luồng

-Chủ đề-Song song dựa trên luồng

Chức năng lấy một đối số có tên là kích thước, đó là tùy chọn. Nếu không được chỉ định, nó sẽ được đặt thành 0, điều này sẽ khiến hàm trả về kích thước ngăn xếp luồng mặc định.size” that specifies the new thread stack size in bytes.

Ví dụ:

.....

# Nhận kích thước ngăn xếp

old_size=threading.stack_size(32768)=threading.stack_size(32768)

Lưu ý, hàm renthing.stack_size () là từ đồng nghĩa hoặc bí danh cho hàm _thread.stack_size ().threading.stack_size() function is a synonym or alias for the _thread.stack_size() function.

Gọi chức năng rening.stack_size () sẽ trả về kích thước ngăn xếp được sử dụng bởi trình thông dịch Python khi tạo các luồng mới.

Trả về kích thước ngăn xếp luồng được sử dụng khi tạo các luồng mới.threading.stack_size() with no argument will return the current value of the thread stack, reporting the new value.

-Chủ đề-Song song dựa trên luồng

Chức năng lấy một đối số có tên là kích thước, đó là tùy chọn. Nếu không được chỉ định, nó sẽ được đặt thành 0, điều này sẽ khiến hàm trả về kích thước ngăn xếp luồng mặc định.size” argument is 32 kilobytes (kb) which is 32,768 bytes.

Nếu kích thước không được chỉ định, 0 được sử dụng.

-Chủ đề-Song song dựa trên luồng

Chức năng lấy một đối số có tên là kích thước, đó là tùy chọn. Nếu không được chỉ định, nó sẽ được đặt thành 0, điều này sẽ khiến hàm trả về kích thước ngăn xếp luồng mặc định.size” argument that it must be a multiple of 4,096 bytes.

Nếu kích thước không được chỉ định, 0 được sử dụng.

Ví dụ dưới đây cho thấy cách lấy kích thước ngăn xếp luồng mặc định.

# SuperfastPython.com

# Ví dụ về việc lấy kích thước ngăn xếp luồngRuntimeError may be raised.

Từ việc nhập luồng stack_size

-Chủ đề-Song song dựa trên luồng

Chức năng lấy một đối số có tên là kích thước, đó là tùy chọn. Nếu không được chỉ định, nó sẽ được đặt thành 0, điều này sẽ khiến hàm trả về kích thước ngăn xếp luồng mặc định.

Nếu kích thước không được chỉ định, 0 được sử dụng.

Ví dụ dưới đây cho thấy cách lấy kích thước ngăn xếp luồng mặc định.

# SuperfastPython.com

# Ví dụ về việc lấy kích thước ngăn xếp luồng

Từ việc nhập luồng stack_size

.....

# Nhận kích thước ngăn xếp mặc định

stack_size(32768)(32768)

Chạy ví dụ truy xuất và báo cáo kích thước ngăn xếp luồng mặc định.

Trong trường hợp này, chúng ta có thể thấy rằng giá trị của số 0 được trả về và báo cáo, điều này chỉ ra rằng mặc định cho hệ điều hành đang được sử dụng.

Nếu kích thước không được chỉ định, 0 được sử dụng.

Ví dụ dưới đây cho thấy cách lấy kích thước ngăn xếp luồng mặc định.

# SuperfastPython.comthreading import stack_size

# Nhận kích thước ngăn xếp mặc định

stack_size(32768)(32768)

Chạy ví dụ truy xuất và báo cáo kích thước ngăn xếp luồng mặc định.

size=stack_size()= stack_size()

print(size)(size)

Trong trường hợp này, chúng ta có thể thấy rằng giá trị của số 0 được trả về và báo cáo, điều này chỉ ra rằng mặc định cho hệ điều hành đang được sử dụng.

Kích thước ngăn xếp sau đó được truy xuất, xác nhận giá trị mới có hiệu lực.

Tăng kích thước ngăn xếp luồng

Kích thước ngăn xếp luồng có thể được tăng lên bằng cách chỉ định một giá trị là bội số của 4.096 byte và lớn hơn 32 kilobyte (kb) là 32.768 byte.

Các giá trị chung có thể bao gồm

  • 4.096 * 8 = 32,768 byte
  • 4.096 * 16 = 65,536 byte
  • 4.096 * 32 = 131,072 byte
  • 4.096 * 64 = 262,144 byte
  • 4.096 * 128 = 524.288 byte

Ví dụ:

.....

# Tăng kích thước ngăn xếp

stack_size(4096*16)(4096*16)

Chọn một giá trị phù hợp cho ứng dụng cụ thể của bạn có thể yêu cầu một số thử nghiệm và lỗi với điểm chuẩn cẩn thận để xác nhận thay đổi có sự cải thiện mong muốn về hiệu suất và/hoặc ổn định.

Ví dụ dưới đây cho thấy cách tăng kích thước ngăn xếp luồng lên 64 kilobyte, hoặc 65.536 byte.

# SuperfastPython.com

# Ví dụ về việc tăng kích thước ngăn xếp luồng

Từ việc nhập luồng stack_sizethreading import stack_size

# Tăng kích thước ngăn xếp

stack_size(4096*16)(4096*16)

Chọn một giá trị phù hợp cho ứng dụng cụ thể của bạn có thể yêu cầu một số thử nghiệm và lỗi với điểm chuẩn cẩn thận để xác nhận thay đổi có sự cải thiện mong muốn về hiệu suất và/hoặc ổn định.

size=stack_size() =stack_size()

print(size)(size)

Ví dụ dưới đây cho thấy cách tăng kích thước ngăn xếp luồng lên 64 kilobyte, hoặc 65.536 byte.

Kích thước ngăn xếp sau đó được truy xuất, xác nhận giá trị mới có hiệu lực.

# SuperfastPython.com

# Ví dụ về việc tăng kích thước ngăn xếp luồngValueError.

Từ việc nhập luồng stack_size

# Báo cáo kích thước ngăn xếp đã thay đổi

Chạy ví dụ đầu tiên đặt kích thước luồng tăng lên 64 kilobyte.

# SuperfastPython.com

# Ví dụ về việc tăng kích thước ngăn xếp luồng

Từ việc nhập luồng stack_sizethreading import stack_size

# Báo cáo kích thước ngăn xếp đã thay đổi

Chạy ví dụ đầu tiên đặt kích thước luồng tăng lên 64 kilobyte.(100000)# will raise ValueError

Đặt kích thước ngăn xếp luồng không hợp lệValueError.

Thay đổi kích thước ngăn xếp luồng thành giá trị không được hỗ trợ sẽ dẫn đến giá trịerror.

Giá trị kích thước ngăn xếp luồng hợp lệ là bội số của 4.096 byte và trên 32.768 byte.

...

# Tăng kích thước ngăn xếp

Chọn một giá trị phù hợp cho ứng dụng cụ thể của bạn có thể yêu cầu một số thử nghiệm và lỗi với điểm chuẩn cẩn thận để xác nhận thay đổi có sự cải thiện mong muốn về hiệu suất và/hoặc ổn định.

Ví dụ dưới đây cho thấy cách tăng kích thước ngăn xếp luồng lên 64 kilobyte, hoặc 65.536 byte.

# SuperfastPython.com

  • # Ví dụ về việc tăng kích thước ngăn xếp luồng
  • Từ việc nhập luồng stack_size
  • # Báo cáo kích thước ngăn xếp đã thay đổi
  • Chạy ví dụ đầu tiên đặt kích thước luồng tăng lên 64 kilobyte.
  • Đặt kích thước ngăn xếp luồng không hợp lệ

Thay đổi kích thước ngăn xếp luồng thành giá trị không được hỗ trợ sẽ dẫn đến giá trịerror.

Giá trị kích thước ngăn xếp luồng hợp lệ là bội số của 4.096 byte và trên 32.768 byte.

Ví dụ, thay đổi kích thước ngăn xếp luồng thành 100.000 byte sẽ dẫn đến giá trị horror trên hầu hết các nền tảng.
Ask your questions in the comments below and I will do my best to answer.

Ví dụ dưới đây cho thấy hiệu quả của việc thiết lập kích thước ngăn xếp luồng không hợp lệ.