javascript - Can't queue jobs using NodeJS async -


मैंने इस कोड का पालन किया, और इस कोड के साथ आया।

  // ASYNC JOBS var Async = require ('async'), spawn = की आवश्यकता होती है ('child_process')। Spawn maxjobs = 4; फ़ंक्शन सेटअप_आर_जब (ऑप्शन, किए गए) {लॉग ('शुरू' + opts.params.pop ()); Var पैराम्स = opts.params; हटाएं ['पैराम्स'] को हटाएं; var आर = स्पॉन ('प्रेतमज', पैराम्स, ऑप्ट्स); आर.ओ.एन. ('एक्जिट', फ़ंक्शन (कोड) {लॉग ('निकला कोड निकला:' + कोड) रिटर्न रिक्त;}) रिक्त वापसी; } Var course_queue = async.queue (setup_R_job, मैक्सिको);   

मैं इस फ़ंक्शन का उपयोग करते हुए नौकरियों को इन्स्तांत करता हूं।

  // instaciante jobs var jobForCourses = function (urls) {for (var i = urls.length - 1; मैं & gt; = 0; i--) {var opts = {cwd: __dirname, env: process.env, पैराम्स: ['../getCourseLinks.js','--course']}; opts.params.push (यूआरएल [i]); लॉग ("कतार:" + opts.params.join ('')); course_queue.push (opts); }; };   

jobForCourses को निम्न के रूप में कहा जाता है।

  var urls = [url1, url2, url3, url4, url5, url6 ]; jobForCourses (यूआरएल);   

यह प्रत्येक यूआरएल के लिए एक नौकरी बनाना चाहिए और एक समय में 4 नौकरियों को निष्पादित करना चाहिए। जब कोई नौकरी की जाती है, तो उसे अगले एक को शुरू करना चाहिए और इतने पर जब तक कतार में कोई और नौकरियां न हो कम से कम यही इसके बारे में बताता है:

कतार (कार्यकर्ता, संगामिति)

निर्दिष्ट संगामिति के साथ एक कतार ऑब्जेक्ट बनाता है कतार में जोड़े गए कार्यों को समांतर (संगामिति सीमा तक) में संसाधित किया जाता है। अगर सभी कार्यकर्ता प्रगति पर हैं, तो कार्य तब तक कतारबद्ध है जब तक कोई उपलब्ध नहीं हो जाता। एक बार एक कार्यकर्ता एक कार्य पूरा करता है, तो उस कार्य का कॉलबैक कहा जाता है।

हालांकि, यह 4 पहली नौकरियों को शुरू करता है, उन्हें समाप्त करता है, और दूसरों को इन्स्तांत नहीं करता यदि मैं maxjobs से 50 सेट करता हूं, तो यह सभी को निष्पादित करेगा, लेकिन यह मेरी इच्छा नहीं है।

संपादित करें

अगर यह समझने में मदद कर सकता है, तो मुझे निम्न आउटपुट मिलता है:

  queuing: ../getCourseLinks.js - कोर्स / पाठ्यक्रम / url1 queuing: ../getCourseLinks.js - कोर्स / कोर्स / यूआरएल 2 कतार: ../getCourseLinks.js - कोर्स / कोर्स / यूआरएल 3 कतार: ../getCourseLinks.js - कोर्स / कोर्स / यूआरएल 4 कतार: ../getCourseLinks.js - कोर्स / पाठ्यक्रम / यूआरएल 5 कतार: ../getCourseLinks.js - पाठ्यक्रम / पाठ्यक्रम / यूआरएल 6 कतार: ../getCourseLinks.js - कोर्स / पाठ्यक्रम / यूआरएल 7 कतार: ../getCourseLinks.js - कोर्स / पाठ्यक्रम / यूआरएल 8 कतार: ../ getCourseLinks.js - पाठ्यक्रम / पाठ्यक्रम / url9 ... शुरू / पाठ्यक्रम / url1 शुरू / पाठ्यक्रम / url2 शुरू / पाठ्यक्रम / url3 शुरू / पाठ्यक्रम / url4 मिल गया निकास कोड: 0 प्राप्त हुआ कोड: 0 मिल गया निकास कोड: 0 मिल गया कोड: 0    

आपको done आह्वान करने की आवश्यकता होगी एक प्रक्रिया समाप्त होने के बाद। इसे आज़माएं: <पूर्व> फ़ंक्शन सेटअप_आर_जब (ऑप्शन, किए गए) {लॉग ('शुरू' + opts.params.pop ()); var पैराम्स = opts.params; हटाएं ['पैराम्स'] को हटाएं; Var आर = स्पॉन ('प्रेतमज', पैराम्स, ऑप्ट्स); R.on ('exit', फ़ंक्शन (कोड) {लॉग ('निकला कोड निकाला हुआ कोड:' + कोड) किया ();})}

आप वहां कुछ त्रुटि संभाल भी जोड़ सकते हैं अर्थात। लेकिन यह प्रारंभिक बिंदु के रूप में सेवा दे सकता है।

Comments

Popular posts from this blog

Java - Error: no suitable method found for add(int, java.lang.String) -

java - JPA TypedQuery: Parameter value element did not match expected type -

c++ - static template member variable has internal linkage but is not defined -