我正在使用Twisted,我希望单个延迟操作返回一个指示符,如果它成功或不同,就像使用DeferredList一样。
这适用于多个延迟:
my_query = deferToThread(self.mongo_pool.db[self.collection_name].find_one,
{
some_query
}
)
(my_success_1, my_data_1), (my_success_2, my_data_2) =
await DeferredList([ensureDeferred(my_query_1), ensureDeferred(my_query_2)])
但只使用一个延迟执行此操作会直接返回数据:
my_return = await ensureDeferred(my_query)
当我将它包装在Deferred之下时,应用程序只会挂起并且不响应:
my_return = await Deferred(ensureDeferred(my_query))
所以,我最终做的是获得该指标,如下所示,它确实有效,但它肯定是错误的:
my_return = await DeferredList([ensureDeferred(my_query)])
(my_success_indicator, my_data) = my_return[0]
有更好的方法吗?我在Twisted版本17.05