2015-11-30 33 views
10

पर चलते समय लागू नहीं किया गया है मेरे पास एक छोटा कोड है जो multiprocessing पैकेज का उपयोग करता है और मेरी स्थानीय मशीन पर ठीक काम करता है।_multiprocessing.SemLock एडब्ल्यूएस लैम्ब्डा

मैं AWS Lambda पर अपलोड और वहाँ चलाने के लिए, मैं निम्नलिखित त्रुटि (स्टैकट्रेस छंटनी) मिल गया है:

[Errno 38] Function not implemented: OSError 
Traceback (most recent call last): 
    File "/var/task/recorder.py", line 41, in record 
    pool = multiprocessing.Pool(10) 
    File "/usr/lib64/python2.7/multiprocessing/__init__.py", line 232, in Pool 
    return Pool(processes, initializer, initargs, maxtasksperchild) 
    File "/usr/lib64/python2.7/multiprocessing/pool.py", line 138, in __init__ 
    self._setup_queues() 
    File "/usr/lib64/python2.7/multiprocessing/pool.py", line 234, in _setup_queues 
    self._inqueue = SimpleQueue() 
    File "/usr/lib64/python2.7/multiprocessing/queues.py", line 354, in __init__ 
    self._rlock = Lock() 
    File "/usr/lib64/python2.7/multiprocessing/synchronize.py", line 147, in __init__ 
    SemLock.__init__(self, SEMAPHORE, 1, 1) 
    File "/usr/lib64/python2.7/multiprocessing/synchronize.py", line 75, in __init__ 
    sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue) 
OSError: [Errno 38] Function not implemented 

यह हो सकता है कि अजगर के मुख्य संकुल का एक हिस्सा लागू नहीं किया है? मुझे नहीं पता कि मैं नीचे क्या चल रहा हूं इसलिए मैं वहां लॉगिन नहीं कर सकता हूं और डीबग कर सकता हूं।

कोई विचार मैं लैम्ब्डा पर multiprocessing कैसे चला सकता हूं?

उत्तर

7

जहां तक ​​मैं कह सकता हूं, मल्टीप्रोसेसिंग एडब्ल्यूएस लैम्ब्डा पर काम नहीं करेगा क्योंकि निष्पादन पर्यावरण/कंटेनर /dev/shm गायब है - https://forums.aws.amazon.com/thread.jspa?threadID=219962 देखें (लॉगिन आवश्यक हो सकता है)।

कोई शब्द (जो मुझे मिल सकता है) अगर अमेज़ॅन इसे बदल देगा, तो मैं अन्य पुस्तकालयों को देख रहा हूं उदा। https://pythonhosted.org/joblib/parallel.html/tmp (जो हम जानते हैं कि मौजूद हैं) पर फ़ॉलबैक होगा यदि /dev/shm नहीं मिल रहा है।

+1

मदद करता है क्या आप इस समस्या को जॉबलिब के साथ हल करने के बारे में बता सकते हैं? मैं अभी इसका परीक्षण कर रहा हूं, और जॉबलिब धारावाहिक परिचालनों में वापस असफल रहा है: '[Errno 38] फ़ंक्शन लागू नहीं किया गया है। जॉबलिब सीरियल मोड ' – pjgranahan

+0

[यह थ्रेड] (https://github.com/joblib/joblib/issues/391) में काम करेगा, यह सुझाव देता है कि जॉबलिब वास्तव में इस मुद्दे के आसपास काम नहीं कर सकता है। – pjgranahan

+0

हाँ क्षमा करें, मैंने कभी इसमें गहराई से खोला नहीं। अच्छी तरह से काम नहीं कर सकता है। – glennji

1

multiprocessing.Pool (SemLock साथ समस्या के कारण) मूल रूप से समर्थन किया जाना प्रतीत नहीं होता है, लेकिन multiprocessing.Process, multiprocessing.Queue, multiprocessing.Pipe आदि ठीक से काम AWSLambda में।

आपको मैन्युअल रूप से बनाने/फोर्किंग प्रक्रियाओं और माता-पिता और बाल प्रक्रियाओं के बीच संचार के लिए multiprocessing.Pipe का उपयोग करके एक समाधान समाधान बनाने की अनुमति देनी चाहिए। उम्मीद है कि

+1

'' 'multiprocessing.Queue''' मेरे लिए काम नहीं करता है और मुझे प्रश्न में एक ही त्रुटि मिलती है। –

+0

कतार काम नहीं करता है, और आप/dev/shm के बिना प्रक्रियाओं के बीच कोई ताले नहीं कर सकते – Atifm

संबंधित मुद्दे