2011-10-27 16 views
5

Giới thiệu

Tôi đã lo lắng với Twisted trong vài ngày qua, đã nhặt python chưa đầy một tháng trước. Độ nghiêng đầu tiên của tôi là chơi với thứ tôi biết và sử dụng hàng ngày, IRC. Tôi đã nhận được kết nối IRC cơ bản và chạy nhờ vào ví dụ ircLogBot.py.Tải/tải lại một phần mã bằng Python mà không cần khởi động lại tập lệnh chính

Câu hỏi

Tôi muốn có một số mã tùy ý chạy bất cứ khi nào một sự kiện IRC (PRIVMSG/CTCP/THAM GIA/PART) được nhận, và cho các mục đích gỡ lỗi tôi muốn để có thể thay đổi đoạn mã đó và sau đó tải lại nó mà không tắt toàn bộ tập lệnh và kết nối lại với máy chủ IRC.

Ghi chú cuối cùng

Nó không phải là giải pháp kết hợp Twisted, vì tôi chưa hiểu đầy đủ. Mặc dù tôi cho rằng đây là thứ xoay quanh, là một khung điều khiển theo sự kiện, có khả năng được thiết kế để làm tốt.

Trả lời

3

Lên lịch sự kiện lặp lại (sau mỗi vài giây) để tải lại mô-đun của bạn đang được gỡ lỗi. Sử dụng hàm dựng sẵn reload() cho mục đích này.

Bạn có thể muốn bọc nó trong một lần thử/trừ để xử lý trường hợp bạn giới thiệu lỗi trong mô-đun đang được gỡ lỗi. Điều đó sẽ giữ cho máy chủ hoạt động khi gặp lỗi :-)

+0

Đã chấp nhận! Tôi không nghĩ đến việc sử dụng các mô-đun như thế. – frontendloader

+0

Hãy chắc chắn đọc [tài liệu tải lại] (http: //docs.python.org/library/functions.html # reload), những gì nó không quá trực quan. –

2

Bạn có thể muốn xem 'livecoding' để xử lý việc tải lại mã; nó có thể phù hợp với nhu cầu của bạn. Tuy nhiên, lưu ý rằng 'livecoding' cần các tệp mã (thư mục) để tuân theo các quy ước riêng của nó mà không nhất thiết phải là pythonic.

Một khả năng khác là cuộn hệ thống của riêng bạn bằng cách sử dụng reload, như Raymond đã đề xuất. Nếu mã của bạn được tách rời khỏi dữ liệu trạng thái của bạn, nó có thể dễ thực hiện.

0

Chạy trong trình thông dịch tương tác. Bạn có thể bắt đầu một chuỗi nền và bạn vẫn đang ở chế độ tương tác. Sau đó, bạn có thể tải lại như mong muốn. Điều đó cho phép bạn kiểm soát nhiều hơn việc tự động điều khiển bộ hẹn giờ.

Tôi thường xuyên khởi động toàn bộ máy chủ doanh nghiệp của mình ở chế độ tương tác.

9

Xoắn có một số chức năng tích hợp trong twisted.python.rebuild, cung cấp khả năng triển khai toàn diện hơn chức năng reload tích hợp sẵn của Python. Vẫn còn một số hạn chế, nhưng sự khác biệt chính của nó từ việc tải lại được xây dựng sẵn của Python là nó sẽ tìm thấy các cá thể đối tượng cũ và thay thế các lớp của chúng bằng phiên bản mới. (Hạn chế chính là bạn phải biết rằng các trường hợp của bạn có thể có trạng thái cũ không khớp với phiên bản hiện tại của bạn là __init__, nếu bạn đã thay đổi nó, đó là những gì rebuild.Sensitive là dành cho.)

Nếu bạn muốn làm một cái gì đó thực sự ưa thích và tự động, bạn có thể thiết lập một màn hình hệ thống tập tin phát hiện khi các tập tin thay đổi, và tải lại các mô-đun liên quan với xây dựng lại khi nó thay đổi. Trên Linux, bạn có thể sử dụng hỗ trợ inotify của Twisted cho thông báo thay đổi và trên OS X, bạn có thể sử dụng cfreactor cùng với FSEvents API via PyObjC. (Tôi không biết chương trình giám sát thay đổi tệp nào hoạt động trên win32 nhưng cũng có thể có ở đó.)

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