2011-02-02 27 views
5

Tôi đang phát triển một ứng dụng nối mạng trong Twisted, một phần trong đó bao gồm một giao diện web được viết bằng Django.Xoắn: Tạo một ThreadPool và sau đó daemonizing dẫn đến treo không rõ ràng

Tôi muốn sử dụng máy chủ WSGI của Twisted để lưu trữ giao diện web và tôi đã viết một plugin "nhấn" hoạt động để cho phép tôi sử dụng twistd.

Khi chạy máy chủ với cờ -n (không làm daemon) mọi thứ hoạt động tốt, nhưng khi cờ này bị xóa, máy chủ không phản hồi yêu cầu và không có thư nào được ghi (mặc dù máy chủ là vẫn chạy).

Có một số bug on Twisted's Trac dường như mô tả chính xác vấn đề và plugin của tôi xảy ra dựa trên code referenced in the ticket.

Thật không may, vấn đề chưa được khắc phục - và nó đã được nâng lên gần một năm trước.

Tôi đã cố gắng để tạo ra một lớp ThreadPoolService, kéo dài Service và bắt đầu một cho ThreadPool khi startService được gọi là:

class ThreadPoolService(service.Service): 
    def __init__(self, pool): 
     self.pool = pool 

    def startService(self): 
     super(ThreadPoolService, self).startService() 
     self.pool.start() 

    def stopService(self): 
     super(ThreadPoolService, self).stopService() 
     self.pool.stop() 

Tuy nhiên, Twisted dường như không được gọi phương thức startService ở tất cả. Tôi nghĩ vấn đề là với plugin "nhấn", ServiceMaker chỉ có thể trả lại một dịch vụ để bắt đầu - và bất kỳ dịch vụ nào khác thuộc cùng một ứng dụng đều không được bắt đầu. Rõ ràng, tôi đang trả lại dịch vụ TCPServer có chứa gốc WSGI.

Tại thời điểm này, tôi đã đánh một phần bức tường gạch. Có ai có bất kỳ ý tưởng như thế nào tôi có thể làm việc vòng vấn đề này?

Trả lời

7

Trả lại số MultiService từ số ServiceMaker; bao gồm ThreadPoolService cũng như dịch vụ ứng dụng chính của bạn. API để lắp ráp một thứ như vậy khá đơn giản:

multi = MultiService() 
mine = TCPServer(...) # your existing application service 
threads = ThreadPoolService() 
mine.setServiceParent(multi) 
threads.setServiceParent(multi) 
return multi 

Vì bạn đã tìm thấy vé để giải quyết vấn đề khó hiểu này trong Twisted, tôi mong được thấy bản vá của bạn :).

+0

Điều này thật hoàn hảo. Tôi không biết tại sao tôi không thấy điều đó trong tài liệu, nhưng nó hoạt động như một sự quyến rũ. Cảm ơn bạn! –

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