Python 多处理队列,用于获取要为进程处理的数据

Python 多处理队列,用于获取要为进程处理的数据,python,multiprocessing,Python,Multiprocessing,我有一个需要提取的文件名列表,我有一个函数可以提取这些文件。由于它主要是使用CPU的任务,所以最好在多个进程之间生成它,以利用多个CPU 现在,我的代码如下所示: import multiprocessing def unpack(files): for f in files: Archive(f).extractall('\\path\\to\\destination\\') n_cpu = multiprocessing.cpu_count() chunks = spli

我有一个需要提取的文件名列表,我有一个函数可以提取这些文件。由于它主要是使用CPU的任务,所以最好在多个进程之间生成它,以利用多个CPU

现在,我的代码如下所示:

import multiprocessing

def unpack(files):
  for f in files:
     Archive(f).extractall('\\path\\to\\destination\\')


n_cpu = multiprocessing.cpu_count()
chunks = split(cabs_to_unpack, n_cpu) # just splits array into n equal chunks

for i in range(n_cpu):
    p = Process(target=unpack, args=(chunks[i],))
    p.start()
    p.join()
def unpack(queue):
  while queue.not_empty():
     f = queue.get()
     Archive(f).extractall('\\path\\to\\destination\\')
但是要处理的文件在大小上有很大的不同。有些文件为1KB,大多数大约为300KB,少数文件约为1.5Gb

因此,我的方法并不完美:5个进程非常快速地处理它们的部分文件并退出,而其他三个进程正在努力处理一些大文件和一堆小文件。因此,最好不要让快速进程退出,而是处理这些小文件

在这里使用一些带有文件列表的队列会更好,它可以正确地处理多个进程。我的解包函数如下所示:

import multiprocessing

def unpack(files):
  for f in files:
     Archive(f).extractall('\\path\\to\\destination\\')


n_cpu = multiprocessing.cpu_count()
chunks = split(cabs_to_unpack, n_cpu) # just splits array into n equal chunks

for i in range(n_cpu):
    p = Process(target=unpack, args=(chunks[i],))
    p.start()
    p.join()
def unpack(queue):
  while queue.not_empty():
     f = queue.get()
     Archive(f).extractall('\\path\\to\\destination\\')
但是我在多处理模块中找不到这个队列。唯一的multiprocessing.Queue不接受要初始化的对象列表,看起来它应该用作进程推送数据的容器,而不是从中获取数据的容器

因此,我的问题很简单,可能很愚蠢(我是多处理机新手),但我应该使用哪个对象/类作为包含要处理的数据的容器?

我建议使用一个

它已经处理了块大小、工作进程的重用和进程处理逻辑