2012-04-29 13 views
6

Estoy escribiendo un programa de ejemplo para probar el uso de multiprocesamiento de trabajadores en Python 2.7.2+pitón piscina multiprocesamiento aserción de error en el intérprete

Este es el código que he escrito en el intérprete de Python ubuntu

>>> from multiprocessing import Pool 
>>> def name_append(first_name,last_name): 
...  return first_name+" "+last_name 
... 

>>> from functools import partial 
>>> partial_name_append=partial(name_append,'kiran') 
>>> partial_name_append('acb') 
'kiran acb' 
>>> abc='kiran' 

>>> pool=Pool(processes=4) 
>>> pool.map(partial_name_append,abc) 
['kiran k', 'kiran i', 'kiran r', 'kiran a', 'kiran n'] 
>>> pool.close() 
>>> pool.join() 

>>> pool.map(partial_name_append,abc) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/multiprocessing/pool.py", line 226, in map 
    assert self._state == RUN 
AssertionError 

después de que consiguiera errores salmuera, por encima de mi grupo de trabajadores código de grandes conjuntos de datos, que estoy tratando de hacer pequeños ejemplos y tratar de averiguar cuál es el error.

yo no entiendo por qué el mismo comunicado 'pool.map' no funciona, cuando se ha trabajado anteriormente. Creo que he ejecutado el 'mapa de la piscina' correctamente, pero no entiendo la razón.

¿Es este error relacionado con "PicklingError: No se puede conservar en vinagre: búsqueda de atributos incorporado .function fallido"

Puede alguien ayudarme?

Gracias

+1

'multiprocessing.Pool()' no funciona en el intérprete interactivo. Echa un vistazo a la [aquí] Documentación (http://docs.python.org/library/multiprocessing.html) –

+0

'multiprocess.Pool()' sin embargo funciona en el intérprete interactivo. –

Respuesta

15

que has proporcionado:

>>> pool.close() 

from the docs:

close()

Prevents any more tasks from being submitted to the pool. Once all the tasks have been completed the worker processes will exit.

Por supuesto no se puede utilizar la piscina más, lo ha cerrado.

+0

así que si uso 'pool = Pool (processes = 4)' de nuevo, entonces puedo volver a usarlo ¿no? Editar: Se trabajó cuando me asignaron a la piscina una vez más que .THANK .. Si no te importa tengo otra pregunta "PicklingError: No se puede conservar en vinagre: builtin.function atributo de búsqueda no se pudo" no soy capaz de averiguar por qué sigo recibiendo este error cuando utilizo pool.map() en un programa – kich

+1

no cierro el grupo (hasta que ya no lo necesite). no necesita 'join()' el grupo (y por lo tanto no es necesario que lo cierre) para esperar los resultados de 'Pool.map()', ya bloquea hasta que los resultados estén listos. puedes seguir usando 'map()' todo lo que quieras. – SingleNegationElimination

Cuestiones relacionadas