পাইথনে সাবপ্রসেস, মাল্টিপ্রসেসিং এবং থ্রেডের মধ্যে সিদ্ধান্ত নিচ্ছেন?


110

আমি আমার পাইথন প্রোগ্রামটি সমান্তরাল করতে চাই যাতে এটি যে মেশিনটিতে চলছে তাতে একাধিক প্রসেসরের ব্যবহার করতে পারে। আমার সমান্তরালতা খুব সহজ, প্রোগ্রামটির সমস্ত সমান্তরাল "থ্রেড" স্বতন্ত্র এবং পৃথক ফাইলগুলিতে তাদের আউটপুট লিখুন। তথ্য বিনিময় করতে আমার থ্রেডের দরকার নেই তবে আমার পাইপলাইনের কিছু পদক্ষেপগুলি তার আউটপুটের উপর নির্ভর করে থ্রেডগুলি শেষ হওয়ার পরে আমি জানি imp

বহনযোগ্যতা গুরুত্বপূর্ণ, এর মধ্যে আমি ম্যাক, লিনাক্স এবং উইন্ডোজের যে কোনও পাইথন সংস্করণে এটি চালানো চাই। এই প্রতিবন্ধকতাগুলি দেওয়া, এটি বাস্তবায়নের জন্য সবচেয়ে উপযুক্ত পাইথন মডিউলটি কোনটি? আমি থ্রেড, সাবপ্রসেস এবং মাল্টিপ্রসেসিংয়ের মধ্যে সিদ্ধান্ত নেওয়ার চেষ্টা করছি, যা সমস্তই সম্পর্কিত কার্যকারিতা সরবরাহ করে বলে মনে হচ্ছে।

এই সম্পর্কে কোন চিন্তা? আমি পোর্টেবল সহজ সমাধান চাই।


সম্পর্কিত: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ১74৪৩২৯৩/২ (থ্রেডগুলি খাঁটি পাইথন কোডের জন্য কেন স্টার্টার নন-স্টার্টার হয় তা দেখতে আমার উত্তরটি এখানে পড়ুন)

1
"যে কোনও পাইথন সংস্করণ" এটি খুব অস্পষ্ট। পাইথন 2.3? 1.x? 3.x? এটি কেবল সন্তুষ্ট করা একটি অসম্ভব শর্ত।
স্পষ্টত

উত্তর:


64

multiprocessingএকটি দুর্দান্ত সুইস-আর্মি ছুরি ধরনের মডিউল। এটি থ্রেডগুলির চেয়ে বেশি সাধারণ, কারণ আপনি এমনকি দূরবর্তী গণনাও করতে পারেন। এটি তাই মডিউলটি আমি আপনাকে ব্যবহার করার পরামর্শ দেব।

subprocessমডিউল এছাড়াও আপনি একাধিক প্রসেস আরম্ভ করার জন্য সম্ভব হবে, কিন্তু আমি খুঁজে পাওয়া যায় নি এটি কম নতুন মাল্টিপ্রসেসিং মডিউল ছাড়া ব্যবহার করা সুবিধাজনক হবে।

থ্রেডগুলি কুখ্যাতভাবে সূক্ষ্ম হয়, এবং সিপথনের সাহায্যে আপনি প্রায়শই একটি কোরের মধ্যে সীমাবদ্ধ থাকেন (যদিও, একটি মন্তব্যে উল্লিখিত হিসাবে, গ্লোবাল ইন্টারপ্রেটার লক (জিআইএল) পাইথন কোড থেকে ডাকা সি কোডে প্রকাশিত হতে পারে) ।

আমি বিশ্বাস করি যে আপনি যে তিনটি মডিউল উল্লেখ করেছেন তার বেশিরভাগ ফাংশন প্ল্যাটফর্ম-স্বতন্ত্র উপায়ে ব্যবহার করা যেতে পারে। বহনযোগ্যতার পক্ষে, লক্ষ্য করুন যে multiprocessingপাইথন ২.6 থেকে পাইথনটির কিছু পুরানো সংস্করণের সংস্করণ বিদ্যমান, তবে এটি কেবলমাত্র স্ট্যান্ডার্ডে আসে। তবে এটি একটি দুর্দান্ত মডিউল!


1
একটি অ্যাসাইনমেন্টের জন্য, আমি কেবল "মাল্টিপ্রসেসিং" মডিউল এবং এর পুল.ম্যাপ () পদ্ধতি ব্যবহার করেছি। খুবই সহজ !
kmonsoor

সেলারি জাতীয় জিনিসও কি বিবেচনাধীন? কেন হয় বা হয় না?
ব্যবহারকারী 3245268

যতদূর আমি বলতে পারি সিলারি আরও জড়িত (আপনার কোনও বার্তা ব্রোকার ইনস্টল করতে হবে) তবে এটি একটি বিকল্প যা সম্ভবত বিবেচনা করা উচিত, হাতের সমস্যার উপর নির্ভর করে।
এরিক হে লেবিগোট

186

আমার জন্য এটি আসলে বেশ সহজ:

Subprocess বিকল্প:

subprocessহয় অন্যান্য এক্সেকিউটেবল চালানোর জন্য --- এটি মূলত একটি মোড়কের কাছাকাছি os.fork()এবং os.execve()ঐচ্ছিক নদীর গভীরতানির্ণয় জন্য কিছু সমর্থন (প্রয়োজন এবং subprocesses থেকে পাইপ স্থাপনের। একথাও ঠিক যে আপনি করতে পারে অন্যান্য আন্ত প্রক্রিয়া যোগাযোগ (আইপিসি) যেমন সকেট যেমন মেকানিজম, বা Posix বা এসআইএসভি ভাগ করে নেওয়া মেমরি But

সাধারণত, যে কোনও subprocessসিঙ্ক্রোনালি ব্যবহার করে --- কেবল কিছু বাহ্যিক ইউটিলিটি কল করে এবং তার আউটপুটটি পড়তে বা তার সমাপ্তির অপেক্ষায় (সম্ভবত এটির ফলাফল কোনও অস্থায়ী ফাইল থেকে পড়া, অথবা এটি কোনও ডাটাবেসে পোস্ট করার পরে)।

তবে কেউ কয়েকশো সাব-প্রসেসি স্প্যান করতে এবং সেগুলি পোল করতে পারে। আমার নিজস্ব ব্যক্তিগত প্রিয় ইউটিলিটি ক্লাস ঠিক তা করে। সবচেয়ে বড় অসুবিধা হল এর subprocessমডিউল যে I / O সমর্থন সাধারণত ব্লক করা হয়। পাইথন ৩.x এর কিছু ভবিষ্যতের সংস্করণ এবং বিকল্প অ্যাসিঙ্কপ্রোক (সতর্কতা যা ডাউনলোডের ডানদিকে নিয়ে যায়, কোনও প্রকার ডকুমেন্টেশন বা README নয়) তা ঠিক করার জন্য একটি খসড়া পিইপি -3145 রয়েছে । আমি এটিও পেয়েছি যে কেবলমাত্র fcntlআপনার Popenপাইপ ফাইল বিবরণকারীকে সরাসরি আমদানি করা এবং পরিচালনা করতে এটি অপেক্ষাকৃত সহজ --- যদিও আমি জানি না যে এটি ইউনিক্স-অ প্ল্যাটফর্মের জন্য পোর্টেবল কিনা।

(আপডেট: 7 আগস্ট 2019: পাইকন 3 অয়নসিও সাবপ্রোসেসিসের জন্য সমর্থন: অ্যাসিনসিও সাবপ্রসেসিস )

subprocess কোনও ইভেন্ট হ্যান্ডলিং সমর্থন নেই ... যদিও আপনি signalমডিউল এবং সরল পুরাতন স্কুল ইউএনআইএক্স / লিনাক্স সংকেত ব্যবহার করতে পারেন --- আপনার প্রক্রিয়াগুলি যেমন ছিল তেমনভাবে বিনষ্ট করে দিতে পারেন।

মাল্টিপ্রসেসিং বিকল্প:

multiprocessingহয় আপনার বিদ্যমান (পাইথন) কোড মধ্যে ফাংশন চালানোর জন্য প্রক্রিয়ার এই পরিবার মধ্যে নমনীয় যোগাযোগের জন্য সমর্থন। বিশেষত যেখানে সম্ভব multiprocessingমডিউলটির Queueঅবজেক্টগুলির চারপাশে আপনার আইপিসি তৈরি করা সবচেয়ে ভাল তবে আপনি Eventঅবজেক্টস এবং অন্যান্য বিভিন্ন বৈশিষ্ট্যও ব্যবহার করতে পারেন (যার মধ্যে কয়েকটি সম্ভবত, mmapপ্ল্যাটফর্মগুলিতে সমর্থনের আশেপাশে নির্মিত যেখানে সমর্থনটি যথেষ্ট)।

পাইথনের multiprocessingমডিউলটি ইন্টারফেস এবং বৈশিষ্ট্যগুলি সরবরাহ করার উদ্দেশ্যে যা সিআইপিথন আপনাকে জিআইএল (গ্লোবাল ইন্টারপ্রেটার লক) সত্ত্বেও একাধিক সিপিইউ / কোরগুলির মধ্যে আপনার প্রসেসিং স্কেল করার অনুমতি দেওয়ার সাথে মিল threading দেয় features এটি আপনার ওএস কার্নেলের বিকাশকারীদের দ্বারা করা সমস্ত সূক্ষ্ম-দানযুক্ত এসএমপি লকিং এবং সংহতিমূলক প্রচেষ্টাকে উপকৃত করে।

থ্রেডিং বিকল্প:

threadingহয় অ্যাপ্লিকেশন যা একটি মোটামুটি সংকীর্ণ পরিসীমা জন্য ইনপুট / আউটপুট আবদ্ধ এবং অত্যন্ত কম লেটেন্সি থেকে যা বেনিফিট এবং থ্রেড সুইচিং এর ওভারহেড সুইচিং (ভাগ কোর মেমরির) বনাম প্রক্রিয়া (একাধিক CPU- র কোর জুড়ে স্কেল প্রয়োজন হবে না) / প্রসঙ্গ পরিবর্তন। লিনাক্সে এটি প্রায় খালি সেট (লিনাক্স প্রক্রিয়া স্যুইচ সময়গুলি এর থ্রেড-স্যুইচের খুব কাছাকাছি থাকে)।

threadingপাইথনের দুটি বড় অসুবিধায় ভুগছে ।

অবশ্যই একটি বাস্তবায়ন নির্দিষ্ট --- বেশিরভাগ সিপিথনকে প্রভাবিত করে। এটাই গিল বেশিরভাগ অংশে, বেশিরভাগ সিপিথন প্রোগ্রাম দুটিরও বেশি সিপিইউ (কোর) এর প্রাপ্যতা থেকে উপকৃত হবে না এবং প্রায়শই পারফরম্যান্স জিআইএল লকিংয়ের কারণে ভুগবে

বৃহত্তর ইস্যু যা বাস্তবায়ন নির্দিষ্ট নয়, তা হ'ল থ্রেডগুলি একই মেমরি, সিগন্যাল হ্যান্ডলার, ফাইল বিবরণকারী এবং কিছু অন্যান্য ওএস সংস্থান ভাগ করে। সুতরাং প্রোগ্রামারকে অবশ্যই অবজেক্ট লকিং, ব্যতিক্রম হ্যান্ডলিং এবং তাদের কোডের অন্যান্য দিকগুলি সম্পর্কে অত্যন্ত সতর্কতা অবলম্বন করতে হবে যা উভয় সূক্ষ্ম এবং যা পুরো প্রক্রিয়াটি (থ্রেডের স্যুট) হত্যা করতে পারে, স্টল করতে পারে বা অচল করে দিতে পারে।

তুলনা করে multiprocessingমডেল প্রতিটি প্রক্রিয়াটিকে তার নিজস্ব স্মৃতি, ফাইল বর্ণনাকারী ইত্যাদি দেয় gives এগুলির যে কোনও একটিতে ক্রাশ বা নিয়ন্ত্রণহীন ব্যতিক্রম কেবল সেই সংস্থানটিকেই মেরে ফেলবে এবং কোনও শিশু বা ভাইবোনদের অন্তর্ধানকে দৃ rob়ভাবে পরিচালনা করা ডিবাগিংয়ের চেয়ে আলাদা করা, বিচ্ছিন্নকরণ এবং থ্রেডে অনুরূপ ইস্যুগুলি ফিক্সিং বা কাজ করে।

  • (দ্রষ্টব্য: threadingবড় আকারের পাইথন সিস্টেমে যেমন নুমপাই ব্যবহার করা আপনার নিজের পাইথন কোডের তুলনায় জিআইএল-এর বিতর্ক থেকে যথেষ্ট কম ভুগতে পারে That's কারণ এগুলি করার জন্য তারা বিশেষত ইঞ্জিনিয়ার হয়েছে; নুনপাইয়ের নেটিভ / বাইনারি অংশগুলি, উদাহরণস্বরূপ, এটি নিরাপদ হলে জিআইএল মুক্তি দেবে)।

পাকান বিকল্প:

এটিও লক্ষণীয় যে টুইস্টেড আরও একটি বিকল্প প্রস্তাব দেয় যা উভয়ই মার্জিত এবং বুঝতে খুব চ্যালেঞ্জ । মূলত, মোড়কে আরও সহজ করার ঝুঁকিতে যেখানে টুইস্টের ভক্তরা পিচফোর্স এবং টর্চ নিয়ে আমার বাড়িতে ঝড় তুলতে পারে, টুইস্টেড কোনও (একক) প্রক্রিয়াটির মধ্যে ইভেন্ট-চালিত সমবায় বহুমুখী কাজ সরবরাহ করে।

এটি কীভাবে সম্ভব তা বোঝার জন্য select()(যা নির্বাচন () বা পোল () বা অনুরূপ ওএস সিস্টেম কলগুলির চারপাশে নির্মিত যেতে পারে ) এর বৈশিষ্ট্যগুলি সম্পর্কে পড়তে হবে । মূলত এগুলি সমস্ত ফাইল বর্ণনাকারীর তালিকার কোনও তালিকা বা কিছু সময়সীমা পেরিয়ে যাওয়ার জন্য ওএসের অনুরোধটি ঘুমানোর অনুরোধ করার ক্ষমতা দ্বারা চালিত।

এই কলগুলির প্রত্যেকটি থেকে জাগ্রত select()করা একটি ইভেন্ট --- কোনওটি সকেট বা ফাইল বর্ণনাকারীর সংখ্যায় ইনপুট উপলব্ধ (পঠনযোগ্য), বা বাফারিং স্পেসে কিছু অন্যান্য (লিখিতযোগ্য) বর্ণনাকারী বা সকেটে উপলব্ধ হয়ে ওঠে, কিছু ব্যতিক্রমী শর্ত (টিসিপি) আউট-ব্যান্ড পুশ প্যাকেটগুলি, উদাহরণস্বরূপ), বা একটি টিমিয়ুট।

সুতরাং এই ইভেন্টগুলিকে পরিচালনা করার পরে টুইস্টেড প্রোগ্রামিং মডেল তৈরি করা হয় তারপরে ফলাফলটি "প্রধান" হ্যান্ডলারটি লুপ করে এটি আপনার হ্যান্ডলারের কাছে ইভেন্টগুলি প্রেরণের অনুমতি দেয়।

আমি নামটি ব্যক্তিগতভাবে ভাবি, প্রোগ্রামিং মডেলটির উচ্ছৃঙ্খল হিসাবে টুইস্টেড ... যেহেতু সমস্যার দিকে আপনার দৃষ্টিভঙ্গিটি অবশ্যই কিছুটা হলেও ভিতরে "বাঁকা" হওয়া উচিত। ইনপুট ডেটা এবং ফলাফলগুলি বা ফলাফলগুলিতে আপনার ক্রিয়াকলাপটিকে ক্রিয়াকলাপ হিসাবে গ্রহণ করার পরিবর্তে আপনি আপনার প্রোগ্রামটিকে পরিষেবা বা ডেমন হিসাবে লিখছেন এবং এটি বিভিন্ন ইভেন্টে কীভাবে প্রতিক্রিয়া ব্যক্ত করে তা নির্ধারণ করছেন। (আসলে একটি বাঁকানো প্রোগ্রামের মূল "প্রধান লুপ" (সাধারণত? সর্বদা?) ক reactor())।

পাক ব্যবহার করে প্রধান চ্যালেঞ্জ ঘটনা চালিত মডেল প্রায় আপনার মন মোচড়ের এবং তার সাথে সাথে ক্লাসের লাইব্রেরি বা টুলকিট যা লেখা আছে ব্যবহার eschewing জড়িত পাক কাঠামোর মধ্যে সহ-কাজ করে। এজন্যই টুইস্টেড এসএসএইচ প্রোটোকল হ্যান্ডলিং, শাপের জন্য এবং তার নিজস্ব সাবপ্রসেস / পোপেন ফাংশন এবং অন্যান্য অনেকগুলি মডিউল এবং প্রোটোকল হ্যান্ডলার সরবরাহ করে যা প্রথমে ব্লাশ করে পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে জিনিসগুলি নকল করে বলে মনে হয়।

আপনারা কখনও কখনও এটি ব্যবহার করার ইচ্ছা না থাকলেও ধারণাগত স্তরে টুইস্টটি বোঝার জন্য এটি দরকারী। এটি আপনার থ্রেডিং, মাল্টিপ্রসেসিং এবং এমনকি সাবপ্রসেসি হ্যান্ডলিংয়ের পাশাপাশি আপনার হাতে নেওয়া কোনও বিতরণ প্রক্রিয়াজাতকরণে কর্মক্ষমতা, বিতর্ক এবং ইভেন্ট হ্যান্ডলিংয়ের অন্তর্দৃষ্টি দিতে পারে।

( নোট: 3.x সহ Python- র নবীনতর সংস্করণ asyncio ) (অ্যাসিঙ্ক্রোনাস ইনপুট / আউটপুট যেমন অতিরিক্ত বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে ASYNC Def , @ async.coroutine প্রসাধক, এবং অপেক্ষায় রয়েছেন কীওয়ার্ডটি এবং ফলন ভবিষ্যতে থেকে সমর্থন এই সমস্ত মোটামুটিভাবে একই রকম। একটি প্রক্রিয়া (সমবায় মাল্টিটাস্কিং) দৃষ্টিকোণ থেকে বাঁকানো । (পাইথন 3 জন্য পাক সমর্থন বর্তমান অবস্থা জন্য, চেক আউট: https://twistedmatrix.com/documents/current/core/howto/python3.html )

বিতরণ বিকল্প:

তবুও আপনি প্রক্রিয়াজাতকরণের আরও একটি ক্ষেত্র যা সম্পর্কে জিজ্ঞাসা করেননি, তবে যা বিবেচনা করার মতো, তা হ'ল বিতরণ প্রক্রিয়াজাতকরণ। বিতরণ প্রক্রিয়াকরণ এবং সমান্তরাল গণনার জন্য পাইথনের অনেকগুলি সরঞ্জাম এবং ফ্রেমওয়ার্ক রয়েছে। ব্যক্তিগতভাবে আমি মনে করি ব্যবহার করার সহজতমটি হ'ল এমন একটি যা কমপক্ষে প্রায়শই সেই স্থান হিসাবে বিবেচিত হয়।

রেডিসের চারপাশে বিতরণ প্রক্রিয়াজাতকরণটি প্রায় তুচ্ছ । পুরো কী স্টোরটি ওয়ার্ক ইউনিট এবং ফলাফলগুলি সংরক্ষণ করার জন্য ব্যবহার করা যেতে পারে, রেডিস লিস্টগুলি Queue()অবজেক্টের মতো ব্যবহার করা যেতে পারে , এবং পিইউবি / এসইউবি সমর্থনটি পছন্দ Eventমতো হ্যান্ডলিংয়ের জন্য ব্যবহার করা যেতে পারে । আপনি আপনার কীগুলি হ্যাশ করতে পারেন এবং রেডিসের উদাহরণগুলির একটি আলগা ক্লাস্টার জুড়ে প্রতিলিপি তৈরি করা, টপোলজি এবং হ্যাশ-টোকেন ম্যাপিংগুলি সংরক্ষণ করতে আপনার কর্মীদের একত্রিত করার জন্য কোনও একক উদাহরণের ক্ষমতা ছাড়িয়ে সামঞ্জস্যপূর্ণ হ্যাশিং এবং ব্যর্থ-ওভার সরবরাহ করতে পারেন এবং মার্শালিং ডেটা (আচারযুক্ত, জেএসএন, বিএসন, বা ওয়াইএমএল)

অবশ্যই আপনি কোন বৃহত্তর স্কেল এবং Redis প্রায় আরো পরিশীলিত সমাধান নির্মাণ শুরু হিসাবে আপনি পুনরায় বাস্তবায়ন বৈশিষ্ট্য ইতিমধ্যে ব্যবহার করে, মীমাংসিত হয়েছে অনেক সেলারি , এ্যাপাচি স্পার্ক এবং Hadoop এর , Zookeeper , etcd , ক্যাসান্ড্রা ইত্যাদি। তাদের সকলের কাছে পাইথনের পরিষেবাগুলিতে অ্যাক্সেসের মডিউল রয়েছে।

[আপডেট: যদি আপনি বিতরণকারী সিস্টেমগুলিতে গণনামূলকভাবে নিবিড় জন্য পাইথন বিবেচনা করছেন তবে কয়েকটি সংস্থান বিবেচনার জন্য: আইপিথন প্যারালাল এবং পাইস্পার্ক । যদিও এটি সাধারণ উদ্দেশ্যে বিতরণ করা কম্পিউটিং সিস্টেম, সেগুলি বিশেষত অ্যাক্সেসযোগ্য এবং জনপ্রিয় উপ-সিস্টেম ডেটা বিজ্ঞান এবং বিশ্লেষণ]]

উপসংহার

সেখানে পাইথনের একক থ্রেডযুক্ত থেকে শুরু করে উপ-প্রক্রিয়াগুলিতে সাধারণ সিঙ্ক্রোনাস কল, পোল্ড সাবপ্রোসেসিসের পুল, থ্রেডড এবং মাল্টিপ্রসেসিং, ইভেন্ট-চালিত সমবায় বহুমুখী কার্যকারিতা, এবং বিতরণ প্রক্রিয়াজাতকরণের বাইরে প্রসেসিং বিকল্পগুলির প্রচলন রয়েছে।


1
ক্লাস / ওওপি সহ মাল্টিপ্রসেসিং ব্যবহার করা শক্ত।
টজোররিমুরি

2
@ জোজুরিরিরি: আমি অনুমান করতে যাচ্ছি যে আপনি বলতে চাইছেন যে অন্য প্রক্রিয়াগুলিতে থাকা কোনও বস্তুর উদাহরণগুলিতে পদ্ধতি কল পাঠানো শক্ত। আমি প্রস্তাব দিয়েছি যে থ্রেডগুলির সাথে আপনার একই সমস্যাটি রয়েছে তবে আরও সহজেই দৃশ্যমান হবে (নাজুক এবং অস্পষ্ট বর্ণের শর্তের পরিবর্তে)। আমি মনে করি যে প্রস্তাবিত পন্থাটি হ'ল ক্যু অবজেক্টগুলির মাধ্যমে এমন সমস্ত প্রেরণের ব্যবস্থা করা হবে যা একক থ্রেডেড, বহু-থ্রেডেড এবং প্রক্রিয়াগুলি জুড়ে কাজ করে। (কিছু রেডিস বা সিলারি কুইউ প্রয়োগের সাথে, এমনকি নোডের ক্লাস্টার জুড়ে)
জিম ডেনিস

2
এটি সত্যিই ভাল উত্তর। আমি আশা করি এটি পাইথন 3 ডক্সের সাথে একযোগের সাথে পরিচয় করিয়েছে।
রুট-11

1
@ রুট -11 আপনাকে নথির রক্ষণাবেক্ষণকারীদের কাছে এটি প্রস্তাব দিতে স্বাগত জানায়; আমি এখানে বিনামূল্যে ব্যবহারের জন্য প্রকাশ করেছি। আপনি এবং তারা পুরো বা কিছু অংশে এটি ব্যবহার করতে স্বাগত।
জিম ডেনিস

"আমার কাছে এটি আসলে বেশ সহজ:" এটি পছন্দ করুন। অনেক ধন্যবাদ
জেরোম

5

অনুরূপ ক্ষেত্রে আমি পৃথক প্রক্রিয়া এবং প্রয়োজনীয় যোগাযোগ ট্রাট নেটওয়ার্ক সকেটের সামান্য কিছু বেছে নিয়েছি। পাইথনটি ব্যবহার করা অত্যন্ত পোর্টেবল এবং বেশ সহজ, তবে সম্ভবত সহজ নয় (আমার ক্ষেত্রে আমার আরও একটি বাধা ছিল: সি ++ এ লিখিত অন্যান্য প্রক্রিয়াগুলির সাথে যোগাযোগ)।

আপনার ক্ষেত্রে আমি সম্ভবত মাল্টি প্রসেসের জন্য যেতে চাই, পাইথন থ্রেড হিসাবে অন্তত সিপিথন ব্যবহার করার সময় আসল থ্রেড নয়। ঠিক আছে, তারা নেটিভ সিস্টেম থ্রেড তবে পাইথন থেকে কল করা সি মডিউলগুলি জিআইএল মুক্তি দিতে পারে বা না পারে এবং ব্লকিং কোড কল করার সময় অন্যান্য থ্রেডগুলি সেগুলি চালানোর অনুমতি দেয়।


4

সিপিথনে একাধিক প্রসেসর ব্যবহার করা আপনার একমাত্র পছন্দ multiprocessingমডিউল। সিপিথন তার অভ্যন্তরীণ ( জিআইএল ) উপর একটি লক রাখে যা অন্যান্য সিপাসের থ্রেডগুলিকে সমান্তরালে কাজ করতে বাধা দেয়। multiprocessingমডিউল (যেমন নতুন প্রসেস সৃষ্টি subprocess) এবং তাদের মধ্যে যোগাযোগের পরিচালনা করে।


5
এটি একেবারেই সত্য নয়, এএফআইকে আপনি সিআইপি ব্যবহার করে জিআইএল মুক্তি দিতে পারেন এবং পাইথনের অন্যান্য বাস্তবায়ন যেমন আয়রন পাইথন বা জাইথন ​​রয়েছে যা এ জাতীয় সীমাবদ্ধতায় ভোগেন না। যদিও আমি ডাউনওয়েট করিনি।
বাসটিয়েন লোনার্ডার্ড

1

শেল আউট এবং ইউনিক্সকে আপনার কাজগুলি করতে দিন:

সাব-প্রসেস মোড়ানো এবং তারপরে ইটারপিপস ব্যবহার করুন :

টেড জিউবার সাইট থেকে

INPUTS_FROM_YOU | xargs -n1 -0 -P NUM ./ প্রসেস #NUM সমান্তরাল প্রক্রিয়া

অথবা

Gnu সমান্তরাল পরিবেশন করা হবে

আপনি ব্যাকরুমের ছেলেদের আপনার মাল্টিকোরের কাজটি করার জন্য পাঠানোর সময় আপনি জিআইএল-এর সাথে যোগাযোগ করতে পারেন।


6
"বহনযোগ্যতা গুরুত্বপূর্ণ, এর মধ্যে আমি ম্যাক, লিনাক্স এবং উইন্ডোজের যেকোন পাইথন সংস্করণে চালানো চাই" "
অবশেষে

এই সমাধানের সাহায্যে আপনি কি কাজের সাথে বার বার যোগাযোগ করতে পারবেন? আপনি এটি মাল্টিপ্রসেসিংয়ে করতে পারেন, তবে আমি সাব-প্রসেসে এটি মনে করি না।
অ্যাবাল্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.