Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套concurrent.futures.ThreadPoolExecutor

嵌套concurrent.futures.ThreadPoolExecutor
EN

Stack Overflow用户
提问于 2017-07-08 10:26:26
回答 1查看 6.8K关注 0票数 24

我有一个程序,我目前正在使用concurrent.futures.ThreadPoolExecutor并发运行多个任务。这些任务通常是I/O绑定的,包括对本地数据库和远程REST的访问。但是,这些任务本身也可以分为子任务,这也将受益于并发性。

我希望在任务中使用concurrent.futures.ThreadPoolExecutor是安全的。我编写了一个玩具例子,这个例子似乎很有效:

代码语言:javascript
运行
AI代码解释
复制
import concurrent.futures


def inner(i, j):
    return i, j, i**j


def outer(i):
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        futures = {executor.submit(inner, i, j): j for j in range(5)}
        results = []
        for future in concurrent.futures.as_completed(futures):
            results.append(future.result())
    return results


def main():
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        futures = {executor.submit(outer, i): i for i in range(10)}
        results = []
        for future in concurrent.futures.as_completed(futures):
            results.extend(future.result())
    print(results)


if __name__ == "__main__":
    main()

虽然这个玩具例子似乎有效,但我希望有一些信心,这是故意的。我希望是这样,因为否则使用executor执行任意代码是不安全的,如果它也使用concurrent.futures来利用并发性。

EN

回答 1

Stack Overflow用户

发布于 2018-06-30 08:33:18

从其他线程产生线程是绝对没有问题的。你的案子没什么不同。

但是迟早,产生线程的开销会相当高,并且产生更多的线程实际上会导致您的软件慢下来。

我强烈建议使用像https://docs.python.org/3/library/asyncio.html这样的库,它能够很好地异步处理任务。它通过使用一个具有非阻塞io的线程来做到这一点。结果可能是比普通线程更快的,因为开销要小得多。

如果不希望使用异步,为什么不在main中创建另一个池执行器,并将其传递给outer()函数?这样,而不是25 (5x5)线程,您将有最多10 (2x5),这是更合理的吗?

您不能传递同一个main()执行器,该执行器调用outer()outer(),因为它可能导致死锁(由每个outer()在调度inner()之前等待另一个outer()完成)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44989473

复制
相关文章
ggplot的aes和aes_string的差异
总共是26个基因,它们都是在case 和 control两个分组需要看表达量差异,而且case 和 control两个分组内部都是10个病人。
生信技能树
2022/07/26
1.8K0
ggplot的aes和aes_string的差异
java使用AES加密解密 AES-128-ECB加密
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * * @author Administrator * */ public class AES { // 加密 public static String Encrypt(String sSrc, String sKey) throws Exce
故久
2020/06/09
3.4K0
Java中的DES和3DES加密算法详解
DES是一种对称加密算法,它使用相同的密钥进行加密和解密操作。DES算法的核心是一个称为Feistel网络的结构,它将明文分成左右两部分,并通过多轮迭代和替换操作来生成密文。
公众号:码到三十五
2024/05/24
3770
Java中的DES和3DES加密算法详解
openssl使用-- 之 AES算法库使用
树莓派上面使用openssl-- 之 AES算法库使用 1 OPENSSL 提供AES 库接口调用的两种方式 1.1 第一种方法,使用aes.h的方式  aes.h 代码如下, 添加了中文注释表示含义 /* * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use *
无限之生
2020/06/30
2.3K0
AES加密和RSA加密
最近项目需要用到前端加密,某些特定的数据需要前端加密之后再传输到后端,然后后端再按照与前端约定好的方式进行解密。
epoos
2022/06/06
2.4K0
AES加密和RSA加密
密码学技术02
一次性密码本是一种非常简单的密码,它原理是:“讲明文与一串随机的比特序列进行XOR运算”
yichen
2020/01/02
7440
java使用AES加密解密 AES-128-ECB加密
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * * @author Administrator * */ public class AES { // 加密 public static String Encrypt(String sSrc, String sKey) throws Excep
故久
2020/06/04
4K0
Java使用AES加密解密
AES加密机制: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。 这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中
二十三年蝉
2018/08/01
5.1K0
DES和AES算法加密解密
前言:在api传递过程中或者操作cookie中的参数都是明文,很容易暴露一些用户以及私密的信息。
王念博客
2019/07/24
2K0
密码学系列之:feistel cipher
feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构。它是由德籍密码学家Horst Feistel在IBM工作的时候发明的。feistel cipher也被称为Feistel网络。
程序那些事
2021/07/15
1.4K0
密码学系列之:feistel cipher
密码学系列之:feistel cipher
feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构。它是由德籍密码学家Horst Feistel在IBM工作的时候发明的。feistel cipher也被称为Feistel网络。
程序那些事
2021/06/16
6590
读《图解密码技术》(一):密码
以前,对一些密码技术,虽然懂得怎么用,但对其原理却一直不甚了解,比如,用公钥加密后,为什么用私钥就可以解密?DES和AES加密时为什么需要一个初始化向量?想要了解这些密码技术的基本原理,而最近买书时看到了《图解密码技术》这本书,刚好可以解答到我的这些问题,于是,就买回来看了。
Keegan小钢
2018/08/10
3.3K1
读《图解密码技术》(一):密码
OpenSSL 使用AES对文件加解密
AES(Advanced Encryption Standard)是一种对称加密算法,它是目前广泛使用的加密算法之一。AES算法是由美国国家标准与技术研究院(NIST)于2001年发布的,它取代了原先的DES(Data Encryption Standard)算法,成为新的标准。AES是一种对称加密算法,意味着加密和解密使用相同的密钥。这就要求密钥的安全性非常重要,因为任何拥有密钥的人都能进行加密和解密操作。其密钥长度,包括128位、192位和256位。不同长度的密钥提供了不同级别的安全性,通常更长的密钥长度意味着更高的安全性。
王瑞MVP
2023/11/29
1.8K0
OpenSSL 使用AES对文件加解密
Vue项目使用AES做加密
1、先在vue项目中安装crypto-js 2、在项目中新建一个utils.js文件 3、utils.js文件中的内容 /** * 工具类 */ import Vue from 'vue' imp
用户1174387
2018/07/04
4.2K0
Python使用AES算法进行加解密
本文要点在于Python扩展库pycrypto实现了大量密码学算法,可以拿来直接使用。 import string import random from Crypto.Cipher import AES def keyGenerater(length): '''生成指定长度的秘钥''' if length not in (16, 24, 32): return None x = string.ascii_letters+string.digits return ''.join([random
Python小屋屋主
2018/04/16
1.8K0
《深入浅出密码学》——读书笔记(更新中)
h1 { text-align: center } h2 { text-align: center } .picture { text-align: center } thead th, tfoot th { text-align: left; background: grey; color: white } tbody th { text-align: left; background: Gainsboro; color:white }
Homqyy
2023/03/06
9860
《深入浅出密码学》——读书笔记(更新中)
AES加密
package com.test.util.encrypt; import org.apache.commons.lang3.StringUtils; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.SecretKeySpec; import java.ma
Ryan-Miao
2018/03/13
3.1K0
CTF 玩转 Crypto 月度总结
两个越来,感谢老大哥们的照顾,自己学到挺多的简单的写下 Crypto 各类密码学和 misc 类流量分析的心得。菜鸡一个,不喜勿喷。
信安之路
2018/08/08
2.8K0
CTF 玩转 Crypto 月度总结
斯坦福大学密码学-分组密码 03
典型的分组密码以迭代的形式构建。输入密钥k,然后将密钥扩张成一系列的回合密钥 到 。使用这些回合密钥一次又一次的迭代使用回合函数加密明文信息。
Daffy
2020/11/03
2K0
使用AES进行文件加密算法
使用AES进行文件加密算法 前言:最近想对手机上一些文件进行加密隐藏,想自己基于jvm平台写一个(kotlin/java)但是网上的加密算法都是不公开的,所以自己利用AES的算法整出了一个文件加密解密的工具 注意:因为我电脑上的JDK是12+,所以如果移植到安卓上有出现报错,是正常现象,只需要修改 AESEncoder 文件就好了 FileEncoder.ktimport java.io.Closeableimport java.io.Fileimport java.io.RandomAccessFilei
Xiaolei123
2019/05/29
3.4K0
使用AES进行文件加密算法

相似问题

为什么AES不是Feistel密码?

30

在Feistel网络中对较小块使用AES

10

双圆Feistel网络

10

学习Feistel密码

20

Poly1305-AES能与AES-256一起使用吗?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档