পাইথনে মাল্টিপ্রসেসিং প্রোগ্রামগুলি ডিবাগ করার জন্য কয়েকটি ভাল অনুশীলনগুলি কী কী?
পাইথনে মাল্টিপ্রসেসিং প্রোগ্রামগুলি ডিবাগ করার জন্য কয়েকটি ভাল অনুশীলনগুলি কী কী?
উত্তর:
সত্যিকারের মাল্টিপ্রসেসিং পাইথন প্রোগ্রামগুলি (বহু- থ্রেড পাইথন প্রোগ্রামগুলির বিপরীতে যা ভয়ঙ্কর জিআইএল মোকাবেলা করতে হবে ) অন্য কোনও ভাষার ভাষা থেকে আলাদা নয়। তাদের সবার একই বুনিয়াদি চ্যালেঞ্জ রয়েছে:
যদিও এমন কিছু বিকাশ পদ্ধতি রয়েছে যা এই প্রতিটি সমস্যা এড়াতে চেষ্টা করে, দিনের শেষে আপনি কী করছেন তা নিয়ে আপনাকে সত্যিই ভাবতে হবে। আমি ভারী স্ট্রেস টেস্টিংয়ের প্রস্তাব দিচ্ছি - বাস্তব জীবনে ঘটতে পারে এমন কিছু মনে করার বাইরে - যাতে আপনার সেই উইন্ডোজ অফারটিউশনের উপর আঘাত হানতে এবং কোনও বড় ডেমোটির মাঝামাঝি বা উত্পাদনের সময় উন্নয়নের দিকে ঝুঁকতে পারে chance
আমরা মাইক্রোসেকেন্ড-টাইমস্ট্যাম্পড লগ ফাইলগুলি ব্যবহার করতাম এবং তারপরে একটি বর্ণ-কোডেড লগ ভিউং অ্যাপ তৈরি করি যাতে এম প্রসেসরের উপর চলমান এন প্রক্রিয়াটির মধ্যে কী ঘটেছিল তা আমরা ভিজ্যুয়ালাইজ করার চেষ্টা করতে পারি । আমরা এমন একটি সিস্টেম তৈরিতে চেষ্টা করেছি (এবং বেশিরভাগ সফল) যা ক্রাশের প্রেক্ষাপটটি পুনরায় তৈরি করতে লগ ফাইলগুলি বন্ধ করে দেয়।
তবে সেরা সরঞ্জামটি হ'ল ভাল নকশা এবং সত্যই দুষ্ট, দুষ্ট লোক যারা আপনার অ্যাপটিকে জল থেকে বের করে দেওয়ার চেষ্টা করে। (হাই, ডাবল!)
একটি জিনিস যা আমি খুব সহায়ক বলে মনে করি তা হল 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 এর মতো স্ট্যান্ডার্ড ডিবাগিং পদ্ধতিগুলি ছাড়া আর কিছুই আমি জানি না ।