यह निर्धारित करने का पसंदीदा तरीका क्या है कि निर्धारित कार्य सक्रिय है या नहीं?निर्धारित समय के राज्य (सक्रिय या नहीं) कैसे पूछे जा सकते हैं?
मैं नीचे अपना समाधान रेखांकित करूँगा, लेकिन मुझे यकीन नहीं है कि यह वास्तव में ऐसा करने का सबसे अच्छा तरीका है।
एक निर्धारित कार्य इस तरह बनाई गई है:
In[1]:= myTask=CreateScheduledTask[Print["task 1"], 30]
Out[1]= ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,False]
हम इस तरह मौजूदा कार्यों के लिए जाँच कर सकते हैं:
In[2]:= ScheduledTasks[]
Out[2]= {ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,False]}
ScheduledTaskObject
(True
या False
) में अंतिम प्रविष्टि यह इंगित करता है कि कार्य शुरू हो गया है या नहीं।
अब कार्य शुरू करें, और की सामग्री की तुलना ScheduledTasks[]
द्वारा लौटाई गई सूची के साथ करें।
In[3]:= StartScheduledTask[myTask]
Out[3]= ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,False]
In[4]:= {ScheduledTasks[],myTask}
Out[4]= {{ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,True]},
ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,False]}
ध्यान दें कि वे भिन्न हैं। परिवर्तनीय False
दिखाता है जबकि ScheduledTasks[]
झूठा दिखाता है। यह दर्शाता है कि चर वास्तव में कार्य वस्तु को पकड़ नहीं लेता है। परिवर्तनीय myTask
को संशोधित करके हम सीधे कार्य को संशोधित नहीं कर सकते हैं। कार्य की वास्तविक स्थिति ScheduledTasks[]
द्वारा वापस कर दी गई है।
यह मानना उचित लगता है कि ScheduledTaskObject
अभिव्यक्ति में पहली प्रविष्टि कार्य के अनुरूप एक अद्वितीय संख्या है। इसलिए किसी भी मैनुअल कार्य पर प्रदर्शन किया आपरेशन शायद एक "संभाल" के रूप में इस नंबर का उपयोग कर सकता है, और हम पहचानकर्ता 1
साथ कार्य की स्थिति की जांच कर सकता इस तरह:
Cases[ScheduledTasks[], ScheduledTaskObject[1,__,state_] :> state]
मैं नहीं कर रहा हूँ बिल्कुल हालांकि यकीन है कि यह दृष्टिकोण (ScheduledTaskObject
से पहचानकर्ता का उपयोग करके) सही है। मैंने परिस्थितियों को देखा है जब पहले से ही एक नए कर्नेल में कुछ कार्य थे (शायद सामने के अंत के कारण --- मेरे पास कई नोटबुक खुले थे, कुछ गतिशील तत्वों के साथ थे, और मैं कार्यों के साथ प्रयोग कर रहा हूं), और कभी-कभी ScheduledTasks[]
कई कार्य एक ही पहचानकर्ता (आमतौर पर 0
) के साथ।
सारांश में:
यह (उनकी
ScheduledTaskObject
से पहले नंबर) अपने पहचानकर्ता द्वारा कार्यों को संभालने के लिए एक विश्वसनीय तरीका है?जब हम इसे पहली बार बनाते हैं तो
CreateScheduledTask
से प्राप्त अभिव्यक्ति को देखते हुए निर्धारित समय की स्थिति से पूछताछ करने का सही तरीका क्या है?
संपादित करें: तो यह संभव है, यह भी बहुत ज्यादा सीपीयू का उपयोग किए बिना, एक निर्धारित कार्य की स्थिति को दर्शाने वाला एक गतिशील सेल के लिए अच्छा होगा। क्या किसी के पास यह कैसे करना है इसके बारे में कोई विचार है?
मैं एक न्यूनतम उदाहरण साथ आने के लिए, हालांकि यह आसान नहीं है, क्योंकि मेरा मानना है कि यह कारण था कुछ सामने अंत बातचीत है की कोशिश करेंगे। कभी-कभी 'अनुसूचित जाति' के बाद 'अनुसूचित कार्य' [] 'का मूल्यांकन करने के बाद आईडी '0' दोनों के साथ दो कार्य दिए गए। – Szabolcs
@Szabolcs मुझे आश्चर्य नहीं होगा अगर आईडी 0 विशेष रूप से कर्नेल से संबंधित कार्यों के लिए असाइन किया गया था। उपयोगकर्ता परिभाषित कार्य सभी 1 से शुरू होते हैं। 0 को बाहर करने के लिए केवल एक चेक शामिल करना आसान हो सकता है (जो आवश्यक नहीं होगा, क्योंकि 'MyTask' में 'id> 0' होगा) – abcd
गणित प्रारंभ करें, और कुछ मूल्यांकन करें। फिर 'बाहर निकलें' का मूल्यांकन करें। फिर 'अनुसूचित कार्य [] 'का मूल्यांकन करें। मुझे तीन तत्वों की एक सूची मिलती है, सभी आईडी 0 के साथ: http://pastie.org/2778819 – Szabolcs