के साथ पाइथन मल्टीप्रोसेसिंग पूल कोड परीक्षण nose के साथ परीक्षण लिखने की कोशिश कर रहा हूं जो मल्टीप्रोसेसिंग का उपयोग करके गणना की गई है।नाक
code/
tests/
tests.py
tests.py इस तरह दिखता है:
import multiprocessing as mp
def f(i):
return i ** 2
pool = mp.Pool()
out = pool.map(f, range(10))
def test_pool():
"""Really simple test that relies on the output of pool.map.
The actual tests are much more complicated, but this is all
that is needed to produce the problem."""
ref_out = map(f, range(10))
assert out == ref_out
if __name__ == '__main__':
test_pool()
code
निर्देशिका से चल रहा है, python tests/tests.py
गुजरता
मैं इस निर्देशिका संरचना है।
nosetests tests/tests.py
पूरा करने के लिए विफल रहता है। यह शुरू होता है, लेकिन pool.map
पर कॉल के माध्यम से कभी नहीं मिलता है और बस लटकता है।
यह क्यों है और सबसे आसान समाधान क्या है?
ऐसा नहीं है कि 'nose' कुछ सूत्रण उपयोग कर रहा है और/या प्रवेश जब चल रहा है संभव है यहाँ एक संभावना (शायद
pool
औरout
वैश्विक रूप में रखते हुए सरल परिवर्तन) है परीक्षण। यह * यूनिक्स सिस्टम पर मल्टीप्रोसेसिंग के साथ मिश्रित होने पर डेडलॉक्स का कारण बन सकता है। यह अजगर कार्यान्वयन के साथ कोई समस्या नहीं है, लेकिन 'कांटा()' फ़ंक्शन स्वयं ही है, जो केवल वर्तमान धागे को फोर्क करता है, [यह] देखें (http://stackoverflow.com/questions/6078712/is-it-safe-to -फर्क-इन-ए-थ्रेड/607966 9 # 607966 9) अधिक विस्तार स्पष्टीकरण के लिए उत्तर दें। – Bakuriuमेरा मानना है कि एकमात्र (?) समाधान 'मल्टीप्रोसेसिंग' मॉड्यूल का नकल करना होगा। असल में मैं नहीं देखता कि आपका उदाहरण परीक्षण कर रहा है। यह वास्तव में 'multiprocessing.Pool.map' विधि के लिए एकजुट है, और' f' फ़ंक्शन के लिए नहीं! – Bakuriu
यह न्यूनतम उदाहरण है जो मेरी त्रुटि को पुन: उत्पन्न करता है। मैं अन्य सामानों का एक भार परीक्षण कर रहा हूं जो इनपुट के रूप में 'pool.map' के परिणाम का उपयोग करता है। – aaren