Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在进程内运行线程_Python_Multithreading_Multiprocessing - Fatal编程技术网

Python 在进程内运行线程

Python 在进程内运行线程,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,我在一个巨大的数据集上运行多处理的图像处理,我想知道在池中运行ThreadPoolExecutor是否比在所有项目上运行池有任何好处 数据集包含多个文件夹,每个文件夹都包含图像,因此我最初的想法是将每个文件夹拆分为一个进程,将该文件夹中的每个图像拆分为一个线程。另一种方法是获取每个图像并将其作为一个进程运行 例如,每个文件夹作为进程,每个图像作为线程 来自并发导入的 来自多处理导入池 从pathlib导入路径 def句柄图像(图像路径:路径): 通过 def句柄文件夹(文件夹路径:路径): 使用

我在一个巨大的数据集上运行多处理的图像处理,我想知道在池中运行ThreadPoolExecutor是否比在所有项目上运行池有任何好处

数据集包含多个文件夹,每个文件夹都包含图像,因此我最初的想法是将每个文件夹拆分为一个进程,将该文件夹中的每个图像拆分为一个线程。另一种方法是获取每个图像并将其作为一个进程运行

例如,每个文件夹作为进程,每个图像作为线程

来自并发导入的

来自多处理导入池
从pathlib导入路径
def句柄图像(图像路径:路径):
通过
def句柄文件夹(文件夹路径:路径):
使用futures.ThreadPoolExecutor()作为e:
e、 映射(句柄\图像,文件夹\路径.glob(“*”))
e、 关机()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
数据集\文件夹=路径(“文件夹”)
将Pool()作为p:
p、 imap\u无序(句柄\u文件夹、数据集\u文件夹.iterdir())
p、 关闭()
p、 加入
将每个图像作为一个过程

来自多处理导入池的

从pathlib导入路径
def句柄图像(图像路径:路径):
如果不是图像,则路径为文件()
回来
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
数据集\文件夹=路径(“文件夹”)
将Pool()作为p:
p、 imap_无序(句柄_图像,数据集_文件夹.glob(“***”)100)
p、 关闭()
p、 加入
您的任务(图像处理)听起来像是CPU受限,因此线程之间没有足够的空闲时间让彼此执行,除非您授权给某个C库,该库为大部分处理释放GIL

但是,如果处理时间与I/O时间相当,则每个进程最多可以获得几个线程的加速(请参阅更多I/O限制任务的时间比较)


作为旁注,对于大规模分布式工作,您可以查看内置池和
map