2014-04-24 18 views
6

Tôi có một chương trình Python giống như máy chủ nhận gói và xử lý chúng theo loại gói. Để làm như vậy, tôi đã sinh ra nhiều quy trình bằng cách sử dụng mô-đun multiprocessing. Tôi đã nhận thấy rằng bộ sưu tập rác gây ra một số chậm trễ trong quá trình hoạt động và các gói không được xử lý trong khung thời gian mong muốn. Tôi biết cách vô hiệu hóa việc thu gom rác thải:Bộ sưu tập Garbage hoạt động như thế nào với nhiều tiến trình/luồng đang chạy?

import gc 
gc.disable() 

Tuy nhiên câu hỏi của tôi chính xác là Python xử lý thu gom rác khi có nhiều quy trình hoặc Chủ đề liên quan? Có sự khác biệt nào giữa việc thu thập rác của các quy trình hoặc chủ đề không? Tôi có cần phải thay đổi bộ sưu tập rác cho mỗi quy trình/luồng không? Hoặc không có thay đổi duy nhất trong bộ sưu tập rác trong quá trình cha/chủ đề chăm sóc xử lý cho tất cả các quy trình con/chủ đề là tốt?

tình hình hiện tại của tôi sử dụng Python 2.7 tuy nhiên tôi sẽ được quan tâm để biết nếu nó là giống nhau cho cả hai Python 2 và Python 3.

Trả lời

3

Một quá trình có thể có nhiều chủ đề. Thu gom rác hoạt động trong một quy trình.

Trên các hệ thống hỗ trợ ngã ba: Nếu bạn vô hiệu hóa bộ sưu tập rác trong một quá trình và sau đó chia nó (= tạo bản sao quy trình) thì GC cũng sẽ bị tắt trong bản sao.

Nếu các quy trình mới được tạo mà không phải là bản sao thì chúng có cấu hình thu gom rác của riêng chúng. Bằng cách defaut GC của họ nên được bật.

Nhưng có rất nhiều thư viện có lớp học Process. Tôi không thể nói những gì họ làm. Nếu bạn sử dụng os để sinh ra một quy trình mới (không phải bản sao) thì nó sẽ chạy với GC được bật.

Cấu hình GC của một quy trình không ảnh hưởng đến cấu hình của GC khác. Các quy trình là ranh giới để bảo vệ mã từ oneanother. Vì vậy, bất cứ điều gì trong một quá trình không thể tiếp cận vào một quá trình khác, dễ dàng.

Các vấn đề liên quan