2012-01-17 34 views
13

Tôi có một chức năng trong một ứng dụng được gọi là email mà tôi muốn cấu hình. Khi tôi cố gắng làm một cái gì đó như thế này, nó thổi lêncProfile cho Python không nhận ra Tên chức năng

from django.core.management import BaseCommand 
    import cProfile 


    class Command(BaseCommand): 
     def handle(self, *args, **options): 
      from email.modname import send_email 
      cProfile.run('send_email(user_id=1, city_id=4)') 

Khi tôi chạy lệnh quản lý này, nó ném các lỗi sau:

 exec cmd in globals, locals 
    File "<string>", line 1, in <module> 
    NameError: name 'send_email' is not defined 

tôi đang thiếu gì ở đây? Làm thế nào để cProfile đánh giá chuỗi (tra cứu các tên func trong không gian tên toàn cầu/cục bộ)?

Trả lời

22

Vấn đề là bạn đã nhập send_email bên trong định nghĩa phương thức của mình.

tôi đề nghị bạn sử dụng runctx:

cProfile.runctx('send_email()', None, locals()) 

Từ the official documentation:

cProfile.runctx(command, globals, locals, filename=None) 

Chức năng này cũng tương tự như chạy(), với lập luận thêm vào cung cấp các globals và người dân địa phương từ điển cho chuỗi lệnh.

+0

Cảm ơn Rik, điều này được đảm bảo nhất. – Ben

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