ক্যু বনাম জিরোএমকিউ আইপিসি সহ পাইথন মাল্টিপ্রসেসিং


10

আমি জিরোএমকিউ ব্যবহার করে পাইথন অ্যাপ্লিকেশন লিখতে এবং জেডগাইডে বর্ণিত মাজারডোমো প্যাটার্নের একটি প্রকরণ প্রয়োগ করতে ব্যস্ত

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

আমি দুটি উপায় নিয়ে চিন্তা করেছি: -

  1. এমন কর্মী তৈরি করুন যা কেবল লগিংয়ের জন্য থাকে এবং জিরোএমকিউ আইপিসি পরিবহন ব্যবহার করে
  2. একটি সারি সহ মাল্টিপ্রসেসিং ব্যবহার করুন

আমি নিশ্চিত নই যে বিষয়টি সম্পর্কে কোনটি উত্তম বা দ্রুত। প্রথম বিকল্পটি আমাকে বর্তমান কর্মী বেস ক্লাসগুলি ব্যবহার করার অনুমতি দেয় যা আমি ইতিমধ্যে সাধারণ কর্মীদের জন্য ব্যবহার করি তবে দ্বিতীয় বিকল্পটি প্রয়োগ করা আরও দ্রুত বলে মনে হয়।

আমি উপরের বা সম্ভবত একটি আলাদা সমাধান সম্পর্কে কিছু পরামর্শ বা মন্তব্য চাই।

উত্তর:


4

আমি জোনাথনের প্রস্তাবিত মতো স্ট্যান্ডার্ড সরঞ্জামগুলি ব্যবহার করার পদ্ধতিকে পছন্দ করি। আপনি কোন ওএসে কাজ করছেন তা উল্লেখ করেননি, তবে একই বিকল্পের পরে অন্য বিকল্পটি পাইথনের স্ট্যান্ডার্ড লগিং মডিউলটি একসাথে ব্যবহার logging.handlers.SysLogHandlerকরতে এবং আরএসগ্লগ পরিষেবাতে লগিং বার্তা প্রেরণ করা (কোনও লিনাক্স / ইউনিক্সে উপলব্ধ, তবে আমি মনে করুন একটি উইন্ডো বিকল্প আছে , কিন্তু আমি কখনই এটি ব্যবহার করি না)।

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

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


1
চক্রটি পুনরায় উদ্ভাবন করা এড়ানো এমন পরামর্শের জন্য +1। এইভাবে ডিজাইন করা কোনও সিস্টেম উত্তরাধিকার সূত্রে আমার আপত্তি হবে না। এটি কাজটি সুন্দরভাবে সম্পন্ন করে, তবুও ভবিষ্যতের পরিবর্তনের জন্য অনেক ডিগ্রি স্বাধীনতা সরবরাহ করে।
এভিয়েডফ্লো

2

আপনি দূরবর্তী লগিং বাস্তবায়নের জন্য তৃতীয় সম্ভাবনা বিবেচনা করতে চাইতে পারেন। যদি আপনি স্ট্যান্ডার্ড পাইথন লগিং মডিউল ব্যবহার করেন তবে logging.QueueHandlerআপনি আপনার কর্মী, ক্লায়েন্ট এবং ব্রোকার logging.QueueListenerএবং আপনার দূরবর্তী লগিং প্রক্রিয়াতে ক্লাসটি ব্যবহার করে বিবেচনা করতে পারেন ।

multiprocessing.Queueআপনার অ্যাপ্লিকেশন প্রক্রিয়া এবং আপনার লগিং প্রক্রিয়ার মধ্যে পরিবহণ হিসাবে সাধারণ পাইথনটি ব্যবহার করার পরিবর্তে , আপনার Queueক্লাসটিকে স্ট্যান্ডার্ড পাইথনের প্রতিস্থাপনের জন্য ড্রপ-ইন প্রতিস্থাপনের জন্য হাঁসের টাইপিং সহ জিরোএমকিউ ব্যবহার করে আপনার নিজস্ব প্রতিস্থাপন শ্রেণি প্রয়োগ করুন Queue। এইভাবে আপনার অ্যাপ্লিকেশন বিতরণ করা ডেটা সেন্টারগুলির মাধ্যমে কোনও একক বহু-কোর কম্পিউটার থেকে যে কোনও পরিবেশে আনল্যাটারে চালাতে সক্ষম হবে।

সংক্ষিপ্তসার হিসাবে, QueueHandlerআপনার সমস্ত কর্মী, ক্লায়েন্ট এবং ব্রোকারদের সাথে একটি স্ট্যান্ডার্ড পাইথন লগার ব্যবহার করুন QueueListenerএবং loggingলগিংয়ের ভারী উত্তোলন পরিচালনা করতে আপনার পছন্দের পাইথন হ্যান্ডলার (গুলি) এর উপর ভিত্তি করে একটি স্বাধীন প্রক্রিয়া তৈরি করুন ।


আমি পাইথন ২.7 ব্যবহার করছি। আমি বিশ্বাস করি যে কুই হ্যান্ডলার ক্লাস কেবল পাইথন ৩.২ থেকে পাওয়া যায়।
ইমরান

পাইথন 3 থেকে কোডটি নেওয়া এবং আপনার অ্যাপ্লিকেশনের অংশ হিসাবে এটি সরাসরি ব্যবহার করা খুব সহজ হবে।
জোনাথন

আমি এটি চেষ্টা করব এবং এটি যদি কাজ করে তবে আপনাকে জানাতে পারি
ইমরান

0

এগুলি একেবারে ভিন্ন ভিন্ন পদ্ধতি, যার প্রতিটি নিজস্ব মতামত এবং স্বতন্ত্র সেট রয়েছে, যা আপনি সম্ভবত পরবর্তী বিকাশের পর্যায়ে প্যানিং আউট দেখতে পাবেন:

আমি দুটি উপায় নিয়ে চিন্তা করেছি: -

  1. এমন কর্মী তৈরি করুন যা কেবল লগিংয়ের জন্য থাকে এবং জিরোএমকিউ আইপিসি পরিবহন ব্যবহার করে
  2. একটি সারি সহ মাল্টিপ্রসেসিং ব্যবহার করুন

আপনি যেভাবে চেষ্টা করতে পারেন তার মধ্যে একটি অতিরিক্ত লগিং-কর্মী থাকতে হবে, যেমন 1 পদ্ধতিতে You আপনি আপনার কর্মীদের একটি মেমক্যাস লগিং ক্লাস্টারে লগ করতে দিতে পারেন, এবং লগিং কর্মী বর্তমান রিসোর্স লোডটি নিরীক্ষণ করে এবং প্রদত্ত রিসোর্স লোড পরামিতি ছাড়ার পরে, কর্মীরা একটি আইওপিএস সীমিত ডিভাইসে লগইন করে (যেমন হার্ডডিস্ক)।

আমিও এই সতর্কতার সাথে জোনাথনের মতামত পছন্দ করি যে আমিও বেশিরভাগ পাইথন ২.x ব্যবহার করি এবং কার্য সম্পাদন-খামটিকে ধাক্কা দেওয়ার জন্য আপনাকে সম্ভবত নিজের লগিং ব্যাকএন্ড সেটআপ করতে হবে।

আমি ভুল হলে আমাকে সংশোধন করুন, তবে আমার গ্রহণযোগ্যতা হ'ল আপনি কিছু সত্যই ডেটা-ইনটেনসিভ টাস্ক করছেন, স্টোরেজ আইওপিগুলি আপনার বাধা হয়ে দাঁড়িয়েছে।

একটি সুবিধাজনক উপায়brokerage হ'ল কেন্দ্রীয় ব্রোকার উদাহরণের সমস্ত অসুবিধাগুলির সাথে বর্ণিত আকারে - ব্রোকারটিকে লগিং করতে দেওয়া । উদাহরণস্বরূপ, যদি ব্রোকারের এত বেশি চাহিদা থাকে যে এটি মেমক্যাচ করা লগগুলিকে সঞ্চয়স্থানে ফেরত দেওয়ার জন্য কোনও শ্বাসকষ্ট না পায় তবে আপনাকে অন্য পদ্ধতির প্রয়োজন।

আপনি শেষ পর্যন্ত ব্রোকারহীন মডেলটি দিয়ে শেষ করতে পারেন। এটি শ্রমিকরা তাদের কাজ পরিচালনা করার মাধ্যমে রয়েছে। একটি সাধারণ উদাহরণে, বিতরণ রাউন্ড-রবিন অ্যালগরিদমের মাধ্যমে।

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