cuốn sách gpt4 ai đã làm

Làm cách nào để sử dụng API cơn lốc xoáy không đồng bộ với Tornado.wsgi.WSGIContainer?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 10:39:36 30 4
mua khóa gpt4 Nike

Tôi cố gắng sử dụng WSGIContainer tùy chỉnh để xử lý các hoạt động không đồng bộ:

từ cơn lốc xoáy nhập httpserver, httpclient, ioloop, wsgi, gen

@gen.coroutine
chắc chắn try_to_download():
phản hồi = năng suất httpclient.AsyncHTTPClient().fetch("http://www.stackoverflow.com/")
nâng cao gen.Return(response.body)


def simple_app(environ, start_response):
res = try_to_download()

print 'xong:', res.done()
in 'exec_info: ', res.exc_info()

trạng thái = "200 được"
reply_headers = [("Loại nội dung", "văn bản/html")]
start_response(trạng thái, reply_headers)
trở lại ['xin chào thế giới']


container = wsgi.WSGIContainer(simple_app)
http_server = httpserver.HTTPServer(container)
http_server.listen(8888)
ioloop.IOLoop.instance().start()

Nhưng điều này không hiệu quả. Có vẻ như ứng dụng không chờ đợi thử_to_tải xuống kết quả hàm Mã bên dưới cũng không hoạt động:

từ cơn lốc xoáy nhập httpserver, httpclient, ioloop, wsgi, gen


@gen.coroutine
chắc chắn try_to_download():
mang lại gen.Task(httpclient.AsyncHTTPClient().fetch, "http://www.stackoverflow.com/")


def simple_app(environ, start_response):

res = try_to_download()
print 'xong:', res.done()
in 'exec_info: ', res.exc_info()

trạng thái = "200 được"
reply_headers = [("Loại nội dung", "văn bản/html")]
start_response(trạng thái, reply_headers)
trở lại ['xin chào thế giới']


container = wsgi.WSGIContainer(simple_app)
http_server = httpserver.HTTPServer(container)
http_server.listen(8888)
ioloop.IOLoop.instance().start()

Bạn có biết tại sao nó không hoạt động? Phiên bản Python tôi đang sử dụng là 2.7.

P.S. bạn có thể hỏi tôi tại sao tôi không muốn sử dụng ngôn ngữ gốccơn lốc xoáy.web.RequestHandler. Lý do chính là tôi có thư viện python tùy chỉnh (WsgiDAV) tạo giao diện WSGI và cho phép viết các bộ điều hợp tùy chỉnh mà tôi có thể tạo không đồng bộ.

câu trả lời hay nhất

WSGI không hoạt động với async.

Nói chung, để một hàm chờ coroutine Tornado hoàn thành thì bản thân hàm đó phải là một coroutine và phảinăng suấtKết quả của coroutine:

@gen.coroutine
người gọi def():
res = năng suất try_to_download()

Nhưng thích ứng dụng đơn giản Tất nhiên, hàm WSGI như vậy không thể là coroutine, vì WSGI không hiểu coroutine. Tài liệu về chai Sự không tương thích giữa WSGI và async được giải thích chi tiết hơn trong . .

Nếu bạn phải hỗ trợ WSGI, đừng sử dụng AsyncHTTPClient của Tornado, hãy sử dụng ứng dụng khách đồng bộ tiêu chuẩn như urllib2Hoặc thay vào đó là PyCurl. Nếu bạn phải sử dụng AsyncHTTPClient của Tornado, đừng sử dụng WSGI.

Làm cách nào để sử dụng API cơn lốc xoáy không đồng bộ với Tornado.wsgi.WSGIContainer? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/21459642/

30 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress