पर तर्क के रूप में नामांकित किया है। मैं एक छोटा प्रोग्राम लिख रहा हूं जहां मैं एक समारोह को असंकालिक रूप से कॉल करना चाहता हूं ताकि यह कॉलर को अवरुद्ध न करे। ऐसा करने के लिए, मैं पाइथन के multiprocessing
मॉड्यूल से Pool
का उपयोग कर रहा हूं।पायथन ने apply_async (..) कॉलबैक
समारोह में अतुल्यकालिक रूप से बुलाया जा रहा है मैं एक namedtuple
वापस जाने के लिए मेरा कार्यक्रम के बाकी के तर्क के साथ फिट करने के लिए चाहते हैं, लेकिन मैं खोजने रहा है कि एक namedtuple
पैदा की प्रक्रिया से पारित करने के लिए एक समर्थित प्रकार होना प्रतीत नहीं होता कॉलबैक के लिए (शायद क्योंकि इसे मसालेदार नहीं किया जा सकता है)। यहां समस्या का न्यूनतम रेपो है।
from multiprocessing import Pool
from collections import namedtuple
logEntry = namedtuple("LogEntry", ['logLev', 'msg'])
def doSomething(x):
# Do actual work here
logCode = 1
statusStr = "Message Here"
return logEntry(logLev=logCode, msg=statusStr)
def callbackFunc(result):
print(result.logLev)
print(result.msg)
def userAsyncCall():
pool = Pool()
pool.apply_async(doSomething, [1,2], callback=callbackFunc)
if __name__ == "__main__":
userAsyncCall() # Nothing is printed
# If this is uncommented, the logLev and status are printed as expected:
# y = logEntry(logLev=2, msg="Hello World")
# callbackFunc(y)
किसी को भी अगर वहाँ कॉलबैक करने के लिए async प्रक्रिया से एक namedtuple
वापसी मान पारित करने के लिए एक तरीका है पता है? क्या मैं कर रहा हूं इसके लिए एक बेहतर/अधिक पायथन दृष्टिकोण है?
* परिभाषित के रूप में *, अपने नाम पर रखा गया टपल ठीक मसालेदार जा सकता है। देखें [एक नामांकित उदाहरण को सही तरीके से कैसे चुनें] (// stackoverflow.com/q/16377215) –