5

Tôi đã cố gắng để làm một proxy http sử dụng BaseHttpServer mà là dựa trên SocketServer trong đó có 2 đồng bộ mixins (ThreadingMixIn và ForkingMixIn)là có bất kỳ hồ bơi cho ThreadingMixIn và ForkingMixIn cho SocketServer?

vấn đề với hai rằng họ làm việc trên mỗi yêu cầu (phân bổ một chủ đề mới hoặc nĩa một quy trình con mới cho mỗi yêu cầu)

có một Mixin sử dụng một nhóm gồm 4 quy trình con và 40 luồng trong mỗi để các yêu cầu được xử lý bởi các chủ đề đã tạo chưa?

vì đây sẽ là hiệu suất lớn và tôi đoán nó sẽ tiết kiệm một số tài nguyên.

Trả lời

1

Tôi đã bắt đầu một dự án mà giải quyết vấn đề này

https://github.com/muayyad-alsadi/python-PooledProcessMixIn

có thể bạn muốn tham gia cùng tôi hoàn thành Todos (dọn dẹp sau khi tổ hợp phím CTRL + C)

+0

Tôi có thể cần phải so sánh nó với các máy chủ dựa trên sự kiện như https://pypi.python.org/pypi/Spawning/ –

+0

điều này không còn hoạt động bằng py 2.7 nữa. Tôi nhận được lỗi này khi thử bản demo của bạn: pickle.PicklingError: Không thể chọn : không tìm thấy như thread.lock – OriginalCliche

+0

Tôi đang sử dụng py 2.7 và mã của tôi không chọn bất kỳ thứ gì –

5

Bạn có thể sử dụng một hồ bơi từ concurrent.futures (trong stdlib từ Python 3.2):

from BaseHTTPServer import HTTPServer, test 
from SimpleHTTPServer import SimpleHTTPRequestHandler 
from SocketServer  import ThreadingMixIn 

from concurrent.futures import ThreadPoolExecutor # pip install futures 

class PoolMixIn(ThreadingMixIn): 
    def process_request(self, request, client_address): 
     self.pool.submit(self.process_request_thread, request, client_address) 

def main(): 
    class PoolHTTPServer(PoolMixIn, HTTPServer): 
     pool = ThreadPoolExecutor(max_workers=40) 

    test(HandlerClass=SimpleHTTPRequestHandler, ServerClass=PoolHTTPServer) 

if __name__=="__main__": 
    main() 

Như bạn có thể thấy việc thực hiện đối với một trường hợp luồng là khá tầm thường.

Nếu bạn lưu nó vào server.py sau đó bạn có thể chạy nó như:

$ python -mserver 

lệnh này sử dụng tối đa 40 chủ đề để phục vụ các yêu cầu trên http://your_host:8000/.

Trường hợp sử dụng chính là HTTPServer là dành cho mục đích thử nghiệm.

+0

tương tự như việc sử dụng nhóm đa xử lý, và đây không phải là giải pháp tối ưu, ví dụ như nó liên quan đến hàng đợi và dưa chua ..etc. vui lòng xem các tính năng [my solution] (https://github.com/muayyad-alsadi/python-PooledProcessMixIn/wiki). –

+0

@muayyad: 1. lớp này cũng như stdlib dành cho mục đích phát triển/thử nghiệm 2. Tôi có thể mong đợi rằng các tác phẩm trên do tính đơn giản của nó. Tôi không thể nói như vậy về giải pháp của bạn 3. Bạn có điểm chuẩn nào không? – jfs

+1

@ j-f-sebastian: Tôi đã sử dụng bao vây để chuẩn, nó tăng gấp đôi hiệu suất (tôi trans Rate: 1530, các mixin khác khoảng 800) –

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