Python多线程-如何防止None项目最终结局-并发期货

时间:2018-08-31 14:09:01

标签: python multithreading concurrency threadpool

我正在寻找从主机名列表中抓取SSL数据的方法。一切都按预期工作,除了get_cert_data函数由于缺少SSL证书或无法连接到主机而返回None之外。两种方式都将None值附加到certs_list。我正在使用一百万个主机的大型列表,由于数据的性质,我希望其中的大多数都没有SSL证书。可以理解,我想节省内存而不在列表中不存储900K None值。感谢您抽出宝贵的时间阅读本文!奖励:使用域名或主机名获取此数据是否更有意义,为什么?

template<class T>
auto convert(T&& t) -> decltype(std::forward<T>(t)) {
    return std::forward<T>(t);
}

int convert(uint8_t t) {
    return t;
}

template<class Head>
void print_args(std::ostream& s, Head&& head) {
    s << convert(std::forward<Head>(head));
}

template<class Head, class... Tail>
void print_args(std::ostream& s, Head&& head, Tail&&... tail) {
    s << convert(std::forward<Head>(head)) << ',';
    print_args(s, std::forward<Tail>(tail)...);
}

1 个答案:

答案 0 :(得分:1)

pool.map不返回结果。它返回Future对象的可迭代对象。每个代表一个要执行的操作。因此,您必须过滤其结果。

valid_certs = [cert.result() for cert in certs if cert.result() is not None]