Tôi có một "lớp kịch bản" trong IronPython và kịch bản trong ứng dụng của tôi hoạt động bằng cách gọi các phương thức trên cá thể của nó. Tôi cần triển khai các kịch bản lệnh gọi từ nhiều luồng. Cách chính xác để làm điều đó là gì?Đa luồng trong IronPython
Tôi có nhiều mối quan tâm:
là
ScriptScope
thread-an toàn không? Thông tin là mâu thuẫn. ScriptScope's documentation says: "ScriptScope không phải là chủ đề an toàn. Máy chủ phải khóa khi nhiều luồng có thể truy cập cùng một mô-đun hoặc phải tạo bản sao cho từng chuỗi." Tuy nhiên, IronRuby sử dụng cùng một DLR và @JimmySchementi says rằng "ScriptRuntime, ScriptEngine và ScriptScope là tất cả các chủ đề an toàn, được thiết kế để sử dụng giữa các luồng. Cụ thể, ScriptScope sử dụng một kho lưu trữ dữ liệu an toàn, vì vậy ScriptScope có thể được chia sẻ giữa các luồng . "Nếu tôi tạo nhiều
ScriptScope
s, điều đó có nghĩa là thực hiện cùng một tập lệnh khởi tạo nhiều lần. Giả sử rằng tôi chạy mười tệp kịch bản lệnh Python, nhập năm tập hợp và trên toàn bộ thực thi khá một chút mã để có được "đối tượng kịch bản" sẵn sàng. Có cách nào để tránh thời gian và chi phí bộ nhớ của việc chạy nhiều mã giống nhau cho mỗi luồng không?Đang tạo
ScriptScope
biến tĩnh-tĩnh (có nghĩa là, áp dụngThreadStaticAttribute
) và thực hiện khởi tạo cho mỗi chuỗi được sử dụng bởiTask.Run
cách để đi? Hoặc tôi có nên sử dụng một sốTaskScheduler
với giới hạn đồng thời không, bởi vì chi phí của nhiều phạm vi cao?
Toàn bộ: cách triển khai chính xác cùng một tập lệnh trên các đối số khác nhau trong nhiều chuỗi? Các tập lệnh phải được thực hiện đồng thời và không được sụp đổ do điều kiện chủng tộc.
Tôi cảm thấy cho bạn. Tôi tìm thấy tài liệu về cả hai phần mềm độc hại và thiếu sắt trong mọi khía cạnh kể từ khi Microsoft ngừng chính thức hỗ trợ nó. –