मैं xargs
लगभग 30 मिलियन छोटी फ़ाइलों को संसाधित करने के लिए एक अजगर स्क्रिप्ट को कॉल करने के लिए उपयोग कर रहा हूं । मैं xargs
इस प्रक्रिया को समानांतर करने के लिए उपयोग करने की उम्मीद करता हूं । मैं जिस कमांड का उपयोग कर रहा हूं वह है:
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
मूल रूप से, Convert.py
एक छोटी सी json फाइल (4kb) में पढ़ेगी, कुछ प्रोसेसिंग करेगी और दूसरी 4kb फाइल पर लिखेगी। मैं 40 सीपीयू कोर वाले सर्वर पर चल रहा हूं। और इस सर्वर पर कोई अन्य सीपीयू-गहन प्रक्रिया नहीं चल रही है।
Htop (btw) की निगरानी करके, CPU प्रदर्शन की निगरानी के लिए कोई अन्य अच्छा तरीका है?), मुझे लगता है कि -P 40
उम्मीद के मुताबिक तेज़ नहीं है। कभी-कभी सभी कोर फ्रीज हो जाएंगे और 3-4 सेकंड के लिए लगभग शून्य हो जाएंगे, फिर 60-70% तक ठीक हो जाएंगे। तब मैं समानांतर प्रक्रियाओं की संख्या को कम करने की कोशिश करता हूं -P 20-30
, लेकिन यह अभी भी बहुत तेज नहीं है। आदर्श व्यवहार को रैखिक गति-अप होना चाहिए। Xargs के समानांतर उपयोग के लिए कोई सुझाव?
xargs -P
और >
अर्ध-लाइन समस्या gnu.org/software/parallel/… की वजह से दौड़ की स्थिति के लिए खुल रहा है। इसके बजाय GNU समानांतर का उपयोग करने से वह समस्या नहीं होगी।