2014-11-14 13 views
7

Nếu tôi tạo một hồ bơi với 4 công nhân và đặt chúng làm một số nhiệm vụ (sử dụng pool.apply_async(..)), tôi có thể truy cập tên của mỗi quá trình từ bên trong bằng cách sử dụng multiprocessing.current_process().name, nhưng làm cách nào để đặt tên từ quy trình gốc (điều này chủ yếu là để đăng nhập)?Làm cách nào để đặt tên cho các quy trình trong một đa xử lý.pool?

Trả lời

4

Process.namejust a setter, bạn có thể tự do gán cho nó.

Hồ bơi có một đối số initializer. Điều này có thể được gọi bất kỳ, và nó sẽ được gọi một lần khi mỗi tiến trình con khởi động. Bạn có thể trỏ điều này đến một hàm đặt thuộc tính name của quá trình đó thành bất kỳ thứ gì bạn muốn.

+0

Cảm ơn, nó hoạt động. Tôi đang sử dụng initializer + setproctitle. – alasarr

+0

@TkTech @Sveltely @alasar trong một hàm mà tôi sử dụng làm ** initializer ** cho nhóm i đặt tên của quá trình bằng cách sử dụng 'multiprocessing.current_process(). Name = 'some string'' và sử dụng thuộc tính bản ghi nhật ký ** % (processName) s ** trong định dạng ghi nhật ký, nhưng vẫn trong các thông điệp tường trình, tôi thấy các tên mặc định được tạo cho các tiến trình (Ví dụ: PoolWorker-1, PoolWorker-2) và không phải là tên mà tôi đang thiết lập cho quá trình khởi tạo. chức năng. Bạn có thể vui lòng cho biết những gì sai. –

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