- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
câu trả lời hay nhất
BẰNG gen.engine
的 Tornado 文档所说:
This decorator is similar to coroutine, except it does not return a Future and the callback argument is not treated specially.
BẰNG gen.coroutine
文档所说
From the caller’s perspective, @gen.coroutine is similar to the combination of @return_future and @gen.engine.
gen.engine
基本上是协程功能的旧版、简化版。如果您正在编写新代码,则应遵循文档的建议并始终使用 tornado.gen.coroutine
。
如果您查看这两个函数的代码(删除了文档),就会很明显。
引擎:
def engine(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
runner = None
def handle_exception(typ, value, tb):
if runner is not None:
return runner.handle_exception(typ, value, tb)
return False
with ExceptionStackContext(handle_exception) as deactivate:
thử:
result = func(*args, **kwargs)
except (Return, StopIteration) as e:
result = getattr(e, 'value', None)
khác:
if isinstance(result, types.GeneratorType):
def final_callback(value):
if value is not None:
raise ReturnValueIgnoredError(
"@gen.engine functions cannot return values: "
"%r" % (value,))
assert value is None
deactivate()
runner = Runner(result, final_callback)
runner.run()
trở lại
if result is not None:
raise ReturnValueIgnoredError(
"@gen.engine functions cannot return values: %r" %
(result,))
deactivate()
# no yield, so we're done
return wrapper
协程:
def coroutine(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
runner = None
future = TracebackFuture()
if 'callback' in kwargs:
callback = kwargs.pop('callback')
IOLoop.current().add_future(
future, lambda future: callback(future.result()))
def handle_exception(typ, value, tb):
thử:
if runner is not None and runner.handle_exception(typ, value, tb):
return True
except Exception:
typ, value, tb = sys.exc_info()
future.set_exc_info((typ, value, tb))
return True
with ExceptionStackContext(handle_exception) as deactivate:
thử:
result = func(*args, **kwargs)
except (Return, StopIteration) as e:
result = getattr(e, 'value', None)
except Exception:
deactivate()
future.set_exc_info(sys.exc_info())
return future
khác:
if isinstance(result, types.GeneratorType):
def final_callback(value):
deactivate()
future.set_result(value)
runner = Runner(result, final_callback)
runner.run()
return future
deactivate()
future.set_result(result)
return future
return wrapper
乍一看,这两者可能都很难理解。但是,很明显代码非常相似,除了 @gen.coroutine
对 gọi lại
kwarg 有一些特殊处理,它构建/返回一个 tương lai
。 @gen.engine
有一些代码会在您尝试从中返回某些内容时专门抛出错误,而不是将其放入 Tương lai
ở giữa.
关于python - tornado.gen.engine 与 tornado.gen.coroutine 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23502338/
Thế hệ 0: Vì vậy, tôi đọc được rằng gen 0 sẽ kích hoạt khi gen 0 vượt quá ngưỡng kích thước. Nhưng tôi cũng đọc được rằng GC không được thực thi trên "mới" vì "mới" chỉ trượt về phía trước một địa chỉ. Vậy khi nào nó kiểm tra xem nó có vượt quá trigger gen 0 G không
"Cuối cùng tĩnh" có được phân bổ trực tiếp cho thế hệ trẻ, thế hệ cũ hay thế hệ perm không? (Tôi nghĩ rất có thể nó sẽ rơi vào thế hệ cũ vào thời điểm tôi nghĩ.) Nếu nó được phân bổ trong gen perm, thì khi nó được phân bổ trong gen perm
Đây là tình huống khi tính song song phải được đưa vào máy chủ phụ trợ. Tôi sẵn sàng truy vấn N ELB, mỗi truy vấn có 5 truy vấn khác nhau và gửi kết quả lại cho máy khách web. Phần phụ trợ là Tornado và từ những gì tôi đã đọc nhiều lần trong các tài liệu trước đây
Tôi đang cố gắng tạo một hoán vị ngẫu nhiên của danh sách. Tôi mới làm quen với tính ngẫu nhiên trong các ngôn ngữ chức năng và chưa hoàn toàn thành thạo các đơn nguyên, nhưng tôi đã sử dụng Random.newStdGen và Random.Shuffle.shuff theo cách mà tôi nghĩ sẽ hoạt động
Xem qua tài liệu về cơn lốc xoáy.gen, ai đó có thể giúp tôi hiểu sự khác biệt chính xác giữa cơn lốc xoáy.gen.coroutine và cơn lốc xoáy.gen.engine Câu trả lời hay nhất là như sau gen.
Trong tài liệu, nếu phương thức này cũng được trang trí bằng @gen.coroutine thì không cần phải có @web.asynchronous. Giống như thế này @web.asynchronous @gen.coroutine def
Chúng ta có hai vị trí trong cùng một đối tượng hộp mã gen~ với các pha: Wander = phasor(in8/dense); ...một số mã sau... phas = (tam giác(pha)
Dự án tôi đang thực hiện đều được viết bằng Tornado, nhưng tôi đã đưa vào một số Twisted để xử lý XML-RPC không đồng bộ. Tôi đang tự hỏi liệu bạn có thể sử dụng gen.engine của Tornado và mang lại gen.T không
Làm cách nào để kiểm tra phiên bản của protoc-gen-go và protoc-gen-validate? protoc-gen-go --version protoc-gen-validate --version tôi đã thử
Chúng tôi đang sử dụng protoc-gen-go v2 (v2 là google.golang.org/protobuf, v1 là github.com/golang/protobuf) khi chúng tôi cố gắng biên dịch gRP
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 @gen.coroutine deffetch_cor từ Tornado.
Khi bạn tạo trình tạo Python 3 và bắt đầu chạy nó ngay lập tức. Bạn sẽ nhận được một lỗi như: TypeError: không thể gửi giá trị không phải Không cho một trình tạo mới bắt đầu
Khi tôi dọn dẹp và xây dựng dự án Android trong Eclipse, nó sẽ xóa nội dung của thư mục bin và thư mục gen và không tạo lại, nó chỉ tạo các thư mục trống gen và bin tại sao điều này lại xảy ra Tôi đã tìm kiếm rất nhiều
Tôi muốn sử dụng protoc-gen-grpc-kotlin-1.0.0 từ protoc-gen-grpc-kotlin. Tôi gặp lỗi Thực thi không thành công cho nhiệm vụ ':generat
Tôi muốn sử dụng protoc-gen-grpc-kotlin-1.0.0 từ protoc-gen-grpc-kotlin. Tôi gặp lỗi Thực thi không thành công cho nhiệm vụ ':generat
Làm cách nào để biểu diễn các hàm tạo biến đổi (giả sử siêu lớp có nhiều hàm tạo, một trong số đó là biến đổi) trong ánh xạ :constructors và định nghĩa -init tiếp theo? Câu trả lời hay nhất Vì các đối số đa dạng về cơ bản là đúng
Tôi đang sử dụng jwilder/nginx-proxy để có một dự án trong miền.tld của mình và một dự án trong api.domain.tld. Tôi đã làm theo hướng dẫn này, tùy chỉnh default.co
Mình vừa format lại máy tính. Mình có win xp sp3 32bit. Tôi đã cài đặt java jdk android SDK Eclipse ide và khi tôi tạo một dự án Android mới, tôi đã gặp lỗi này. dự án
Tôi đang phát triển dự án Android của mình và sau khi xóa các thư viện không sử dụng, tôi gặp lỗi: myproject/gen đã tồn tại nhưng không phải là thư mục nguồn Chuyển đổi.
protoc-gen-doc Quy tắc mẫu tùy chỉnh giải thích chi tiết về dự án trình diễn hỗ trợ. Các tệp proto được sử dụng trong dự án này nằm trong thư mục ./proto và đến từ ví dụ proto chính thức. Tất cả được liệt kê trong dự án này.
Tôi là một lập trình viên xuất sắc, rất giỏi!