2013-08-09 92 views
6

Tôi có một mẫu người tiêu dùng sản xuất đơn giản được thiết lập trong một phần mã gui của tôi. Tôi đang cố gắng để chỉ cấu hình phần người tiêu dùng cụ thể để xem có cơ hội tối ưu hóa hay không. Tuy nhiên, khi cố gắng để chạy mã với python -m cProfile -o out.txt myscript.py Tôi nhận được một lỗi được ném từ mô-đun pickle của Python.Mã hóa hồ sơ Python sử dụng đa xử lý?

File "<string>", line 1, in <module> 
    File "c:\python27\lib\multiprocessing\forking.py", line 374, in main 
    self = load(from_parent) 
    File "c:\python27\lib\pickle.py", line 1378, in load 
    return Unpickler(file).load() 
    File "c:\python27\lib\pickle.py", line 858, in load 
    dispatch[key](self) 
    File "c:\python27\lib\pickle.py", line 880, in load_eof 
    raise EOFError 
EOFError 

Các mô hình cơ bản trong mã là

class MyProcess(multiprocessing.Process): 
    def __init__(self, in_queue, msg_queue): 
     multiprocessing.Process.__init__(self) 
     self.in_queue = in_queue 
     self.ext_msg_queue = msg_queue 
     self.name == multiprocessing.current_process().name 

    def run(self): 
     ## Do Stuff with the queued items 

này thường được đưa nhiệm vụ từ phía GUI của sự vật, nhưng đối với mục đích thử nghiệm, tôi thiết lập nó như sau.

if __name__ == '__main__': 

    queue = multiprocessing.Queue() 
    meg_queue = multiprocessing.Queue() 
    p = Grabber(queue) 
    p.daemon = True 
    p.start() 
    time.sleep(20) 
    p.join() 

Nhưng khi thử bắt đầu tập lệnh, tôi nhận được thông báo lỗi ở trên.

Có cách nào xung quanh lỗi không?

Trả lời

3

Theo hiểu biết của tôi, mô-đun cProfile không hoạt động tốt với multiprocessing trên dòng lệnh. (Xem Python multiprocess profiling.)

Một cách để giải quyết vấn đề này là chạy profiler từ bên trong mã của bạn - đặc biệt, bạn sẽ cần thiết lập một tệp đầu ra hồ sơ khác nhau cho mỗi quy trình trong hồ bơi của bạn. Bạn có thể thực hiện điều này khá dễ dàng bằng cách thực hiện cuộc gọi đến cProfile.runctx('a+b', globals(), locals(), 'profile-%s.out' % process_name).

http://docs.python.org/2/library/profile.html#module-cProfile

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