2012-07-18 21 views
5

Tôi đang chơi xung quanh với mô-đun đa xử lý python và muốn có thể hiển thị tên của quy trình hiện đang thực hiện.python multiprocessing - truy cập vào tên quá trình bên trong hàm được gọi với Process.start (target = func)

Nếu tôi có thể tạo một lớp tùy chỉnh MyProcess kế thừa từ multiprocessing.Process tôi có thể in tên của quá trình theo cách sau

from multiprocessing import Process 

class MyProcess(Process): 
    def __init__(self): 
     Process.__init__(self) 

    def run(self): 
     #do something nasty and print the name 
     print self.name 

p = MyProcess() 
p.start() 

Tuy nhiên nếu tôi đang tạo ra các quy trình bằng cách sử dụng constructor của lớp Process

from multiprocessing import Process 
def somefunc(): 
    print Process.name     #1 

p = Process(target=somefunc) 
p.start() 
print p.name       #2 

# 2 công trình nhưng # 1 không hoạt động. Có cách nào tôi có thể in tên của quá trình thực hiện hiện tại bên trong somefunc?

Trả lời

7

Bạn có thể sử dụng chức năng current_process:

from multiprocessing import Process, current_process 

def somefunc(): 
    print current_process().name 

if __name__ == '__main__': 
    p = Process(target=somefunc) 
    p.start() 
    print p.name 
+0

ổn, bây giờ tìm kiếm current_process trong các tài liệu tôi thấy phương pháp này tại http://docs.python.org/library/multiprocessing.html#miscellaneous đoán , Tôi cần phải RTFM với một chút kiên nhẫn và tập trung :) –

+0

@AnuvratParashar Nó đã được liên kết ở trên :) – schlamar

+0

oh có thực sự! –

3

Thay vì chuyển đối số target, hãy ghi đè phương thức run. Từ đó, bạn có thể gọi someFunc và chuyển đối tượng quy trình cho nó.

Tên không phải là khái niệm cấp hệ điều hành. Nó là cấp độ Python và nó không phải là tự động mà quá trình bạn thực thi thậm chí có một đối tượng Process bất cứ nơi nào.