es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

multiproceso: No hay espacio disponible en el dispositivo.

Cuando ejecuto el ejemplo de multiprocesamiento en un sistema operativo OSX, recibo el error “OSError: [Errno 28] No space left on device”.

El error ENOSPC (“No hay espacio disponible en el dispositivo”) se desencadenará en cualquier situación en la que los datos o metadatos asociados con una operación de E / S no se puedan escribir en ningún lugar debido a la falta de espacio disponible. Esto no siempre significa espacio en disco, puede significar espacio en disco físico, espacio lógico (por ejemplo, longitud máxima del archivo), espacio en una determinada estructura de datos o espacio de dirección. Por ejemplo, se puede obtener si no hay espacio en la tabla de directorios (vfat) o no quedan nodos del índice. Significa aproximadamente “No puedo encontrar dónde escribir esto”.

¿Lo que no entiendo, dónde se escriben los archivos en mi código siguiente?

Cualquier ayuda se aprecia mucho.

Código de ejemplo:

#! /usr/bin/env python3
import sys
import os
import multiprocessing as mp
import time

def foo_pool(x):
    time.sleep(2)
    return x*x

result_list = []
def log_result(result):
    result_list.append(result)
    print(result)

def apply_async_with_callback():
    pool = mp.Pool()
    for i in range(10):
        pool.apply_async(foo_pool, args = (i, ), callback = log_result)
    pool.close()
    pool.join()
    print(result_list)

if __name__ == '__main__':
    apply_async_with_callback()

Error completo:

python3 test.py
Traceback (most recent call last):
  File "test.py", line 32, in <module>
    apply_async_with_callback()
  File "test.py", line 23, in apply_async_with_callback
    pool = mp.Pool()
  File "/usr/local/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/multiprocessing/context.py", line 119, in Pool
    return Pool(processes, initializer, initargs, maxtasksperchild,
  File "/usr/local/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/multiprocessing/pool.py", line 191, in __init__
    self._setup_queues()
  File "/usr/local/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/multiprocessing/pool.py", line 343, in _setup_queues
    self._inqueue = self._ctx.SimpleQueue()
  File "/usr/local/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/multiprocessing/context.py", line 113, in SimpleQueue
    return SimpleQueue(ctx=self.get_context())
  File "/usr/local/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/multiprocessing/queues.py", line 342, in __init__
    self._rlock = ctx.Lock()
  File "/usr/local/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/multiprocessing/context.py", line 68, in Lock
    return Lock(ctx=self.get_context())
  File "/usr/local/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/multiprocessing/synchronize.py", line 162, in __init__
    SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx)
  File "/usr/local/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/multiprocessing/synchronize.py", line 57, in __init__
    sl = self._semlock = _multiprocessing.SemLock(
OSError: [Errno 28] No space left on device</module>
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Los archivos no están siendo escritos en tu código. El mensaje de error indica que no hay suficiente espacio disponible en el dispositivo donde se está ejecutando el código para realizar operaciones de entrada/salida, como la creación de archivos o el almacenamiento de datos. Esto podría deberse a la limitación del espacio físico del disco u otros tipos de restricciones de espacio. En este caso, el error se produce porque el módulo de multiprocesamiento está intentando asignar recursos para el procesamiento paralelo, pero no hay suficiente espacio disponible para hacerlo.

Comments are closed.