ডেমন থ্রেডস ব্যাখ্যা


237

ইন পাইথন ডকুমেন্টেশন এটা বলেছেন:

একটি থ্রেডকে "ডেমন থ্রেড" হিসাবে পতাকাঙ্কিত করা যেতে পারে। এই পতাকার তাত্পর্যটি হ'ল ডেমনের থ্রেডগুলি কেবল তখনই ছেড়ে যায় যখন পুরো পাইথন প্রোগ্রামটি প্রস্থান করে। প্রাথমিক মানটি তৈরি করার থ্রেড থেকে উত্তরাধিকার সূত্রে প্রাপ্ত।

এর অর্থ কী বা এর ব্যবহারিক উদাহরণ যেখানে আপনি থ্রেডগুলি সেট করেছেন তা কি কারও কাছে পরিষ্কার ব্যাখ্যা রয়েছে daemonic?

আমার জন্য এটি পরিষ্কার করুন: সুতরাং আপনি থ্রেডগুলি সেট করেননি এমন একমাত্র পরিস্থিতি daemonic, যখন আপনি চান যখন মূল থ্রেডটি প্রস্থান করার পরে সেগুলি চালিয়ে যেতে চান?

উত্তর:


447

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

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


1
সুতরাং যদি আমার কাছে একটি শিশু থ্রেড রয়েছে যা একটি ফাইল রাইটিং অপারেশন করছে যা নন-ডিমনতে সেট করা আছে, তার মানে কি আমাকে এটিকে স্পষ্টভাবে প্রস্থান করতে হবে?
সিয়াস্তো পাইকার্জ

8
@ সান আপনার লেখার থ্রেডটি লেখার কাজ শেষ করে কী করবে? এটি কি কেবল ফিরে আসবে? যদি তা হয় তবে তা যথেষ্ট। ডিমন থ্রেডগুলি সাধারণত এমন জিনিসগুলির জন্য হয় যা লুপে চালিত হয় এবং সেগুলি নিজে থেকে প্রস্থান করে না।
ক্রিস জেস্টার-ইয়ং

এটি কিছুই করে না,
ফেরতও দেয়

2
@ সান যদি এটি থ্রেড ফাংশনের নীচে থেকে পড়ে যায় তবে এটি সুস্পষ্টভাবে ফিরে আসে।
ক্রিস জেস্টার-ইয়ং

এটি Noneসেক্ষেত্রে ফিরে আসে, তবে এটি কোনও বিষয় নয়, রিটার্ন মান ব্যবহার হয় না।
ক্রিস জেস্টার-ইয়াং

30

ধরা যাক আপনি কোনও ধরণের ড্যাশবোর্ড উইজেট তৈরি করছেন। এর অংশ হিসাবে, আপনি এটি আপনার ইমেল বাক্সে অপঠিত বার্তা গণনা প্রদর্শিত করতে চান। সুতরাং আপনি একটি ছোট থ্রেড তৈরি করুন যা করবে:

  1. মেল সার্ভারের সাথে সংযুক্ত হন এবং আপনার কাছে কত অপঠিত বার্তা রয়েছে তা জিজ্ঞাসা করুন।
  2. আপডেট করা গণনা সহ জিইউআই সিগন্যাল করুন।
  3. কিছুক্ষণ ঘুমোও।

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


18

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

এটি কার্যকর নয় বলে নয়, তবে কিছু খারাপ পার্শ্ব প্রতিক্রিয়া রয়েছে কারণ আপনি যদি সেগুলি ব্যবহার করেন তবে আপনি অনুভব করতে পারেন। পাইথন রানটাইম মূল থ্রেডে জিনিস ছিঁড়ে শুরু করার পরে ডেমন থ্রেডগুলি এখনও কার্যকর করতে পারে, যার ফলে কিছু চমকপ্রদ ব্যতিক্রম ঘটে।

এখানে আরও তথ্য:

https://joeshaw.org/python-daemon-threads-considered-harmful/

https://mail.python.org/pipermail/python-list/2005-February/343697.html

কড়া কথায় বলতে গেলে আপনার কখনই তাদের প্রয়োজন হবে না, এটি কিছু ক্ষেত্রে বাস্তবায়নকে আরও সহজ করে তোলে।


এখনও অজগর 3 নিয়ে এই সমস্যা? ডকুমেন্টেশনে এই "উদ্ভট ব্যতিক্রমগুলি" সম্পর্কিত কোনও পরিষ্কার তথ্য নেই।
খেরাউদ

5
জো এর ব্লগ পোস্ট থেকে: "জুন ২০১৫ আপডেট করুন: এটি পাইথন বাগ ১৮৫6। এটি পাইথন ৩.২.১ এবং ৩.৩ এ স্থির করা হয়েছিল, তবে এই ফিক্সটি কখনই ২.x এ ব্যাকপোর্ট করা হয়নি। (২.7 শাখায় ব্যাকপোর্ট করার চেষ্টা করার ফলে অন্য বাগটি হয়েছিল এবং এটি পরিত্যাগ করা হয়েছিল)
ক্লেক

আমি এখানে আমার অভিজ্ঞতাটি ভাগ করতে চাই: আমি একাধিকবার থ্রেড হিসাবে ফাংশন করেছি। এর অভ্যন্তরে আমার পাইথনের উদাহরণ রয়েছে loggingএবং আমি প্রত্যাশা করেছি যে থ্রেডটি শেষ করে সমস্ত বস্তু (প্রতিটি থ্রেড / ফাংশনের জন্য ফাইল বর্ণনাকারী) ধ্বংস হয়ে যাবে। আমার প্রোগ্রাম শেষে, আমি অনেক আউটপুট পছন্দ IOError: [Errno 24] Too many open files:। এর সাথে lsof -p pid_of_program, আমি আবিষ্কার করেছি যে এফডিগুলি খোলা ছিল, এমনকি শক্ত থ্রেড / ফাংশনগুলি তাদের কাজ শেষ করেছে। কার্যসংক্রান্ত? ফাংশন শেষে লগ হ্যান্ডলার সরানো হচ্ছে। সুতরাং daemonicথ্রেডস, অবিশ্বস্ত ...
ivanleoncz

17

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

কিছুটা পরামর্শ: থ্রেড এবং সিঙ্ক্রোনাইজেশনের সাথে জড়িত থাকার সময় ক্লিন শটডাউন ভুল হওয়া সহজ easy আপনি যদি এড়াতে পারেন তবে তা করুন। যখনই সম্ভব ডিমন থ্রেড ব্যবহার করুন।


13

ক্রিস ইতিমধ্যে ডেমন থ্রেডগুলি কী তা ব্যাখ্যা করেছেন, তাই আসুন ব্যবহারিক ব্যবহার সম্পর্কে কথা বলি। অনেক থ্রেড পুল বাস্তবায়ন কার্য কর্মীদের জন্য ডেমন থ্রেড ব্যবহার করে। শ্রমিকরা থ্রেড যা কার্য সারি থেকে কার্য সম্পাদন করে।

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


4
যে সাবধান! যদি কোনও প্রোগ্রাম একটি গুরুত্বপূর্ণ কাজটি (উদাহরণস্বরূপ, "পটভূমিতে কিছু ফাইল আপডেট করুন") একটি ডেমন টাস্ক কাতারে জমা দেয়, তবে সেই ফাইলটি আপডেট করার মাঝামাঝি সময়ে টাস্কটি সম্পাদন করার আগে প্রোগ্রামটি শেষ হতে পারে বা আরও খারাপ হতে পারে।
সলোমন স্লো

10

ক্রিসের উদ্ধৃতি দিয়ে: "... যখন আপনার প্রোগ্রামটি প্রস্থান করে, তখন কোনও ডিমন থ্রেড স্বয়ংক্রিয়ভাবে মারা যায়।" আমি যে এটি অঙ্ক আপ হয়। আপনি যখন এগুলি হঠাৎ করেই শেষ করেন যখন মূল প্রোগ্রামটি শেষ হওয়ার সময় কার্যকর হয় তখন আপনি তাদের যত্নবান হন।


4

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

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