निम्नलिखित कार्यक्रम:मैं multiprocessing.Pool में operator.itemgetter का उपयोग क्यों नहीं कर सकता?
import multiprocessing,operator
f = operator.itemgetter(0)
# def f(*a): return operator.itemgetter(0)(*a)
if __name__ == '__main__':
multiprocessing.Pool(1).map(f, ["ab"])
निम्नलिखित त्रुटि के साथ विफल:
Process PoolWorker-1:
Traceback (most recent call last):
File "/usr/lib/python3.2/multiprocessing/process.py", line 267, in _bootstrap
self.run()
File "/usr/lib/python3.2/multiprocessing/process.py", line 116, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3.2/multiprocessing/pool.py", line 102, in worker
task = get()
File "/usr/lib/python3.2/multiprocessing/queues.py", line 382, in get
return recv()
TypeError: itemgetter expected 1 arguments, got 0
क्यों मैं त्रुटि (CPython 2.7 और 3.2 पर लिनक्स x64 पर) मिलता है, और क्यों यह गायब पड़ता अगर मैं तीसरी पंक्ति को अपूर्ण करें?
वाह, मैंने वास्तव में आपके उत्तर से कुछ सीखा। +1 और धन्यवाद। – steveha
वैसे, यदि आप सोच रहे हैं, तो वास्तविक कारण क्यों आइटमजटर की प्रतिलिपि नहीं बनाई जा सकती है (और तुलना नहीं की जा सकती है, इसे धोया नहीं जा सकता है, स्पष्ट उपयोगी repr, आदि नहीं है) isn ' इतने ज्यादा नहीं कि किसी ने सोचा कि ऑपरेटर.c में उन सभी को लागू करना एक बुरा विचार होगा, क्योंकि कोई भी नहीं सोचा था कि यह लागू करने के लायक होने के लिए पर्याप्त महत्वपूर्ण था। इसके बारे में एक अजगर-देव या पायथन-विचार धागा है। – abarnert
ध्यान दें कि यह लैम्ब्डा के साथ भी विफल रहता है, लेकिन अधिक समझदार 'पिकलिंग एरर: अचार नहीं कर सकता: विशेषता लुकअप __builtin __। फ़ंक्शन विफल'। –
phihag