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

python - cơn lốc xoáy sử dụng AsyncHTTPClient và gen để yêu cầu url, sử dụng raise gen.Return để có ngoại lệ

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 13:17:02 27 4
mua khóa gpt4 Nike

Tôi mới làm quen với cơn lốc xoáy nên tôi đã làm theo hướng dẫn của cơn lốc xoáy. Khi tôi bắt đầu sử dụng Coroutines, ví dụ cho biết: Nhập và tạo từ Tornado.

@gen.coroutine
def tìm nạp_coroutine(url):
http_client = AsyncHTTPClient()
phản hồi = năng suất http_client.fetch(url)
# Trong các phiên bản Python trước 3.3, trả về giá trị từ
# máy phát điện không được phép sử dụng và bạn phải sử dụng
# nâng cao gen.Return(response.body)
# thay vì.
trả lại phản hồi.body

Khi tôi chạy thử nghiệm này, nó báo lỗi Cú pháp 'trở lại' với đối số bên trong trình tạo, vì vậy tôi đã bỏ ghi chú những gợi ý như sau: import Tornado.httpserver import Tornado .ioloop import Tornado.options import Tornado.web

từ nhập khẩu cơn lốc xoáy.options xác định, tùy chọn

Định nghĩa("port", default=8888, help="chạy trên cổng đã cho", type=int)
từ gen nhập khẩu cơn lốc xoáy
từ cơn lốc xoáy.httpclient nhập AsyncHTTPClient

@gen.coroutine
def tìm nạp_coroutine(url):
http_client = AsyncHTTPClient()
phản hồi = năng suất http_client.fetch(url)
#trả lại phản hồi.body
nâng cao gen.Return(response.body)

lớp MainHandler(tornado.web.RequestHandler):
chắc chắn nhận được (tự):
self.write("Xin chào thế giới")
dữ liệu = tìm nạp_coroutine (url = "http://www.baidu.com")
self.write(dữ liệu)
in dữ liệu


chắc chắn chính():
cơn lốc xoáy.options.parse_command_line()
ứng dụng = cơn lốc xoáy.web.Application([
(r"/", MainHandler),
])
http_server = cơn lốc xoáy.httpserver.HTTPServer(ứng dụng)
http_server.listen(options.port)
cơn lốc xoáy.ioloop.IOLoop.instance().start()


if __name__ == "__main__":
chủ yếu()

Nhưng nó ném ngoại lệ như thế này:

[E 140925 17:35:53 web:1407] Ngoại lệ chưa được phát hiện GET / (::1)
HTTPServerRequest(protocol='http', Host='localhost:8888', Method='GET', uri='/', version='HTTP/1.1', remote_ip='::1', headers={'Accept- Ngôn ngữ': 'zh-TW,zh;q=0.8,zh-CN;q=0.6,en;q=0.4', 'Chấp nhận-Mã hóa': 'gzip,deflate,sdch', 'Máy chủ': 'localhost:8888', 'Chấp nhận': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q =0,8', 'Tác nhân người dùng': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36', 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'If-None-Match' : '"e02aa1b106d5c7c6a98def2b13005d5b84fd8dc8"'})
Traceback (most recent call last):
Tệp "/Library/Python/2.7/site-packages/tornado-4.0.2-py2.7-macosx-10.9-intel.egg/tornado/web.py", dòng 1332, trong _execute
kết quả = phương thức(*self.path_args, **self.path_kwargs)
Tệp "helloworld.py", dòng 39, trong get
self.write(dữ liệu)
Tệp "/Library/Python/2.7/site-packages/tornado-4.0.2-py2.7-macosx-10.9-intel.egg/tornado/web.py", dòng 656, bằng văn bản
raise TypeError("write() chỉ chấp nhận các đối tượng byte, unicode và dict")
TypeError: write() chỉ chấp nhận các đối tượng byte, unicode và dict
[E 140925 17:35:53 web:1811] 500 GET / (::1) 3,94ms

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

Tài liệu rấtví dụ tương tự :

lớp GenAsyncHandler(RequestHandler):
@gen.coroutine
chắc chắn nhận được (tự):
http_client = AsyncHTTPClient()
phản hồi = năng suất http_client.fetch("http://example.com")
do_something_with_response(phản hồi)
self.render("template.html")

总结:

  • Trong python 2.x bạn không thể trả lại những thứ bên trong một khối, hãy sử dụng @gen.coroutine Trang trí, chỉ cho phép duy nhất trở lại
  • Trong python 2.x, nếu bạn cần trả về thứ gì đó trong khối @gen.coroutine, thì hãy sử dụng nuôi gen.Trở về, như bạn đã hiểu chính xác
  • Bạn không cần phải ở tronglấy Phương thức này trả về mọi thứ để phản hồi kèm theo một số dữ liệu cho máy khách. bạn cần nóviếtMột cái gì đó (trong ví dụ trên, đó là bằng cách gọi tự kết xuất hoàn thành).

Vì vậy, thay thế mã này bằng

        do_something_with_response(phản hồi)
self.render("template.html")

Sử dụng cái này:

        self.write(response.body)
tự.finish()

tự.finish()Phản hồi sẽ được hoàn thành, kết thúc yêu cầu HTTP. nó ở trong tự kết xuất Tự động được gọi trong phương thức.

xử lý yêu cầu cuối cùng:

từ gen nhập khẩu cơn lốc xoáy
từ cơn lốc xoáy.web nhập requestHandler
từ cơn lốc xoáy.httpclient nhập AsyncHTTPClient


lớp GenAsyncHandler(RequestHandler):
@gen.coroutine
chắc chắn nhận được (tự):
http_client = AsyncHTTPClient()
phản hồi = năng suất http_client.fetch("http://google.com")
self.write(response.body)
tự.finish()

Về python - cơn lốc xoáy sử dụng AsyncHTTPClient và gen để yêu cầu url và sử dụng raise gen.Return để có ngoại lệ, 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/26035303/

27 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