执行延迟时返回成功指示

时间:2017-10-06 12:22:25

标签: python asynchronous twisted deferred

我正在使用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

0 个答案:

没有答案