मैं एक समारोह पर एक सजावट का उपयोग करना चाहता हूं जिसे मैं बाद में एक मल्टीप्रोसेसिंग पूल में भेज दूंगा। हालांकि, कोड "पिकलिंग एरर: अचार नहीं कर सकता: विशेषता लुकअप __builtin__
। विफल विफल" के साथ विफल रहता है। मुझे नहीं लगता कि यह यहां क्यों विफल रहता है। मुझे यकीन है कि यह कुछ आसान है, लेकिन मुझे यह नहीं मिल रहा है। नीचे एक न्यूनतम "कामकाजी" उदाहरण है। मैंने सोचा कि functools
फ़ंक्शन का उपयोग इस काम को करने के लिए पर्याप्त होगा।मल्टीप्रोसेसिंग के साथ पाइथन सजावट
यदि मैं फ़ंक्शन सजावट पर टिप्पणी करता हूं, तो यह किसी समस्या के बिना काम करता है। multiprocessing
के बारे में क्या है कि मैं यहां गलतफहमी कर रहा हूं? क्या यह काम करने का कोई तरीका है?
संपादित: दोनों एक प्रतिदेय वर्ग डेकोरेटर और एक समारोह डेकोरेटर जोड़ने के बाद, यह पता चला है कि समारोह डेकोरेटर अपेक्षा के अनुरूप काम करता है। कॉल करने योग्य वर्ग सजावट असफल रहा है। कॉल करने योग्य वर्ग संस्करण के बारे में क्या है जो इसे मसालेदार रखने से रोकता है?
import random
import multiprocessing
import functools
class my_decorator_class(object):
def __init__(self, target):
self.target = target
try:
functools.update_wrapper(self, target)
except:
pass
def __call__(self, elements):
f = []
for element in elements:
f.append(self.target([element])[0])
return f
def my_decorator_function(target):
@functools.wraps(target)
def inner(elements):
f = []
for element in elements:
f.append(target([element])[0])
return f
return inner
@my_decorator_function
def my_func(elements):
f = []
for element in elements:
f.append(sum(element))
return f
if __name__ == '__main__':
elements = [[random.randint(0, 9) for _ in range(5)] for _ in range(10)]
pool = multiprocessing.Pool(processes=4)
results = [pool.apply_async(my_func, ([e],)) for e in elements]
pool.close()
f = [r.get()[0] for r in results]
print(f)
यह पोस्ट इंगित करता है कि पिकलिंग सजाए गए सामान मुश्किल हैं: http://gael-varoquaux.info/blog/?पी = 120 – Daenyth
हां, मुझे वह पृष्ठ भी मिला। यही कारण है कि मैंने 'functools' रैपर जोड़ा। लेकिन ऐसा कोई फर्क नहीं पड़ता है। मैं कबूल करता हूं कि मैं वास्तव में यह नहीं समझता कि यह क्यों विफल हो रहा है यह देखने में नीचे क्या हो रहा है। – agarrett