Pool.map multiprocesamiento de Python para múltiples argumentos

user642897:

En la biblioteca de multiprocesamiento de Python, ¿hay alguna variante pool.mapque admita múltiples argumentos?

text = "test"
def harvester(text, case):
    X = case[0]
    text+ str(X)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=6)
    case = RAW_DATASET
    pool.map(harvester(text,case),case, 1)
    pool.close()
    pool.join()
remitente:

La respuesta a esto depende de la versión y la situación. La respuesta más general para las versiones recientes de Python (desde 3.3) fue descrita por primera vez a continuación por JF Sebastian . 1 Utiliza el Pool.starmapmétodo, que acepta una secuencia de tuplas de argumentos. Luego, descomprime automáticamente los argumentos de cada tupla y los pasa a la función dada:

import multiprocessing
from itertools import product

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.starmap(merge_names, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...

Para versiones anteriores de Python, necesitará escribir una función auxiliar para descomprimir los argumentos explícitamente. Si desea usar with, también deberá escribir un contenedor para convertirlo Poolen un administrador de contexto. (Gracias a muon por señalar esto).

import multiprocessing
from itertools import product
from contextlib import contextmanager

def merge_names(a, b):
    return '{} & {}'.format(a, b)

def merge_names_unpack(args):
    return merge_names(*args)

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(merge_names_unpack, product(names, repeat=2))
    print(results)

# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...

En casos más simples, con un segundo argumento fijo, también puede usar partial, pero solo en Python 2.7+.

import multiprocessing
from functools import partial
from contextlib import contextmanager

@contextmanager
def poolcontext(*args, **kwargs):
    pool = multiprocessing.Pool(*args, **kwargs)
    yield pool
    pool.terminate()

def merge_names(a, b):
    return '{} & {}'.format(a, b)

if __name__ == '__main__':
    names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
    with poolcontext(processes=3) as pool:
        results = pool.map(partial(merge_names, b='Sons'), names)
    print(results)

# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...

1. Mucho de esto se inspiró en su respuesta, que probablemente debería haber sido aceptada en su lugar. Pero dado que este está atascado en la parte superior, parecía mejor mejorarlo para los futuros lectores.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Multiprocesamiento de Python con matrices y múltiples argumentos

Multiprocesamiento de Python con matrices y múltiples argumentos

para multiprocesamiento de bucles o subprocesos múltiples en Python

¿Chunksize irrelevante para multiprocesamiento / pool.map en Python?

Multiprocesamiento de Python: aplique pool.map en métodos de objetos específicos

Python multiprocesamiento / multiproceso para un bucle con más de 3 argumentos

Multiprocesamiento de Python usando pool.map con list

Multiprocesamiento de Python con Pool ()

¿Hay alguna razón para llamar a join cuando se usa pool.map mientras se usa el multiprocesamiento de Python?

Python 3.4 multiprocesamiento recursivo Pool.map ()

Usar pool para multiprocesamiento en Python (Windows)

Utilice multiprocesamiento o subprocesos múltiples para mejorar la velocidad de extracción en Python

Multiprocesamiento de Python, funciones con argumentos

Multiprocesamiento o subprocesos múltiples en python para descargar archivos

Multiprocesamiento o subprocesos múltiples en python para descargar archivos

Combine Pool.map con matriz de memoria compartida en multiprocesamiento de Python

Multiprocesamiento de Python: seguimiento del proceso de operación pool.map

No se puede encurtir <tipo 'método de instancia'> cuando se usa Pool.map () multiprocesamiento

Python para multiprocesamiento de bucles

Hardware para multiprocesamiento de Python

Python para multiprocesamiento de bucles

Multiprocesamiento en Python: manejar múltiples subprocesos de trabajo

Python multiprocesamiento de múltiples procesos por hilo

Multiprocesamiento: ¿Cómo usar pool.map en una lista y funcionar con argumentos?

Error de decapado al usar pool.map en multiprocesamiento

Función de Python: múltiples argumentos

Pasar múltiples argumentos de bash a python

Pasando múltiples argumentos de Python a R

Python argparse procesamiento de múltiples argumentos