expertenaustausch > comp.lang.* > comp.lang.python

Оlе Ѕtrеісhеr (05.02.2015, 21:59)
Hallo,

ich versuche gerade, ein Paket fr (Debian) Hurd einzurichten, welches
multiprocessing benutzt. Unter Hurd ist die Funktion sem_open() nicht
implementiert. Wenn ich jetzt folgendes mache:

import multiprocessing
q = multiprocessing.Queue()

bekomme ich unter Python2.7 einen ImportError. Wenn ich es unter
Python3.4 mache, gibt es dagegen einen NotImplementedError.

Die Dokumentation schweigt sich dazu aus.
Ich bin etwas verwundert, dass das

1. nicht dokumentiert ist
2. sich offensichtlich irgendwann verndert hat

Kann ich jetzt darauf bauen, dass es immer einer der beiden Fehler ist,
oder muss ich damit rechnen, dass sich das bei Python3.5 wieder ndert?
Zum Beispiel, dass multiprocessing.Queue() erfolgreich war, aber die
Verwendung der Queue abbricht?

Was ist der "saubere" Weg, ein fehlendes sem_open() abzufangen?

Ole
Оlе Ѕtrеісhеr (05.02.2015, 22:04)
ole-usenet-spam (?l? ?tr???h?r) writes:
> bekomme ich unter Python2.7 einen ImportError. Wenn ich es unter
> Python3.4 mache, gibt es dagegen einen NotImplementedError.


.... einen AttributeError, was tatschlich vllig unverstndlich ist.
Mike Mller (06.02.2015, 08:34)
Am 05.02.15 um 21:04 schrieb ?l? ?tr???h?r:
> ole-usenet-spam (?l? ?tr???h?r) writes:
>> bekomme ich unter Python2.7 einen ImportError. Wenn ich es unter
>> Python3.4 mache, gibt es dagegen einen NotImplementedError.

> ... einen AttributeError, was tatschlich vllig unverstndlich ist.


Schau mal nach ob du wirklich multiprocessing importiert hast.
Einfach mal `print(multiprocessing)` einbauen. Das sollte dir zeigen
welches Modul es wirklich ist.

Hinweis: Am Besten immer vollstndige Tracebacks mitschicken und nicht
nur den Namen der Fehlerklasse.

Mike
Оlе Ѕtrеісhеr (06.02.2015, 10:18)
Mike Mller <mmueller> writes:
> Am 05.02.15 um 21:04 schrieb ?l? ?tr???h?r:
>> ole-usenet-spam (?l? ?tr???h?r) writes:
>>> bekomme ich unter Python2.7 einen ImportError. Wenn ich es unter
>>> Python3.4 mache, gibt es dagegen einen NotImplementedError.

>> ... einen AttributeError, was tatschlich vllig unverstndlich ist.

> Schau mal nach ob du wirklich multiprocessing importiert hast.


Ja klar, habe ich. Das Paket wird identisch installiert auf einem
Dutzend Plattformen.

> Hinweis: Am Besten immer vollstndige Tracebacks mitschicken und nicht
> nur den Namen der Fehlerklasse.


Das ist 3.4.2:

self = <multiprocessing.context.DefaultContext object at 0x1449b0c>, maxsize = 0

def Queue(self, maxsize=0):
'''Returns a queue object'''
from .queues import Queue
> return Queue(maxsize, ctx=self.get_context())


/usr/lib/python3.4/multiprocessing/context.py:101:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <multiprocessing.queues.Queue object at 0x511e8cc>, maxsize = 0

def __init__(self, maxsize=0, *, ctx):
if maxsize <= 0:
> maxsize = _multiprocessing.SemLock.SEM_VALUE_MAX E AttributeError: 'module' object has no attribute 'SemLock'


/usr/lib/python3.4/multiprocessing/queues.py:38: AttributeError

und das ist 2.7.9:

maxsize = 0

def Queue(maxsize=0):
'''
Returns a queue object
'''
> from multiprocessing.queues import Queue


/usr/lib/python2.7/multiprocessing/__init__.py:217:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

__all__ = ['Queue', 'SimpleQueue', 'JoinableQueue']

import sys
import os
import threading
import collections
import time
import atexit
import weakref

from Queue import Empty, Full
import _multiprocessing
from multiprocessing import Pipe
> from multiprocessing.synchronize import Lock, BoundedSemaphore, Semaphore, Condition


/usr/lib/python2.7/multiprocessing/queues.py:48:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Condition', 'Event'
]

import threading
import os
import sys

from time import time as _time, sleep as _sleep

import _multiprocessing
from multiprocessing.process import current_process
from multiprocessing.util import Finalize, register_after_fork, debug
from multiprocessing.forking import assert_spawning, Popen

# Try to import the mp.synchronize module cleanly, if it fails
# raise ImportError for platforms lacking a working sem_open implementation.
# See issue 3770
try:
from _multiprocessing import SemLock
except (ImportError):
raise ImportError("This platform lacks a functioning sem_open" +
" implementation, therefore, the required" +
" synchronization primitives needed will not" +
> " function, see issue 3770.") E ImportError: This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.


/usr/lib/python2.7/multiprocessing/synchronize.py:59: ImportError

Beides direkt kopiert aus dem entsprechenden Unittest-Fehlerreport.
hnliche Themen