পাইথনে মাল্টিপ্রসেসিং ডিবাগ করুন


15

পাইথনে মাল্টিপ্রসেসিং প্রোগ্রামগুলি ডিবাগ করার জন্য কয়েকটি ভাল অনুশীলনগুলি কী কী?

উত্তর:


6

সত্যিকারের মাল্টিপ্রসেসিং পাইথন প্রোগ্রামগুলি (বহু- থ্রেড পাইথন প্রোগ্রামগুলির বিপরীতে যা ভয়ঙ্কর জিআইএল মোকাবেলা করতে হবে ) অন্য কোনও ভাষার ভাষা থেকে আলাদা নয়। তাদের সবার একই বুনিয়াদি চ্যালেঞ্জ রয়েছে:

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

যদিও এমন কিছু বিকাশ পদ্ধতি রয়েছে যা এই প্রতিটি সমস্যা এড়াতে চেষ্টা করে, দিনের শেষে আপনি কী করছেন তা নিয়ে আপনাকে সত্যিই ভাবতে হবে। আমি ভারী স্ট্রেস টেস্টিংয়ের প্রস্তাব দিচ্ছি - বাস্তব জীবনে ঘটতে পারে এমন কিছু মনে করার বাইরে - যাতে আপনার সেই উইন্ডোজ অফারটিউশনের উপর আঘাত হানতে এবং কোনও বড় ডেমোটির মাঝামাঝি বা উত্পাদনের সময় উন্নয়নের দিকে ঝুঁকতে পারে chance

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

তবে সেরা সরঞ্জামটি হ'ল ভাল নকশা এবং সত্যই দুষ্ট, দুষ্ট লোক যারা আপনার অ্যাপটিকে জল থেকে বের করে দেওয়ার চেষ্টা করে। (হাই, ডাবল!)


26

একটি জিনিস যা আমি খুব সহায়ক বলে মনে করি তা হল multiprocessingমডিউলটিতে বিদ্যমান লগারটি ব্যবহার করা । আপনার প্রধান কোড এ চেষ্টা করুন:

import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)

আরও দেখুন: http://docs.python.org/library/m মাল্টিপ্রোসেসিং html# লগিং

অতিরিক্ত হিসাবে, আপনি ব্যবহার করে বর্তমান প্রক্রিয়া নাম অ্যাক্সেস করতে পারেন:

cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))

দেখুন: http://docs.python.org/library/m মাল্টিপ্রোসেসিং html#m মাল্টিপ্রোসেসিং

এগুলি ছাড়া pdb& Co এর মতো স্ট্যান্ডার্ড ডিবাগিং পদ্ধতিগুলি ছাড়া আর কিছুই আমি জানি না ।

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