English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

الطبيعة المتوازية القائمة على الثنائي في Python

الخيوط في علوم الكمبيوتر هي مجموعة من التعليمات التي يمكن أن تُدار بشكل مستقل بواسطة مدير المهمات، وهو جزء من نظام التشغيل.

الميزة الرئيسية للخيوط هي تشغيل عدة خيوط في وقت واحد. تعني الخيوط تنفيذ مهام مختلفة، استدعاء دوال في البرنامج، وتشغيل عدة خيوط في نفس الوقت، مما لا يعني أنها تنفذ على أجهزة كمبيوتر مختلفة.

تُستخدم الخيوط في هذين الحالتين.

  • عندما يحتاج مخرج البرنامج الفرعي إلى دمج مع البرنامج الرئيسي.

  • عندما يحتوي البرنامج الرئيسي على كود مستقل نسبيًا.

وحدة الخيوط

يقدم بايثون وحدة خيوط قوية جدًا، بالإضافة إلى دعم متقدم للخيوط.

تعريف وحدة الخيوط العديد من الدوال، والتي تستخدم للحصول على بيانات متعلقة بالخيوط، وستقوم هذه الدوال بتنفيذ نفسها تلقائيًا.

threading.active_count()

ستقوم هذه الدالة بتحويل عدد عناصر الخيوط النشطة الحالية. في هذا السياق، سيكون العدد المُرجع مساوياً للطول من القائمة المُرجعة.enumerate().

threading.current_thread()

ستقوم هذه الدالة بتحويل العنصر الحالي من Thread، وهو يُطابق الخيوط التي يتحكم فيها المُستخدم.

threading.get_ident()

ستقوم هذه الدالة بتحويل معرف الخيوط الحالية. وهو عدد صحيح غير صفر.

threading.enumerate()

ستقوم هذه الدالة بتحويل قائمة بجميع عناصر الخيوط النشطة (بما في ذلك الخيوط الحارسة)، وستقوم دالة current_thread() بإنشاء خيوط افتراضية وعدم الاستمرار في الخيوط المنتهية والخيوط التي لم تُبدأ بعد.

threading.main_thread()

ستقوم هذه الدالة بتحويل العنصر الرئيسي للخيوط.

threading.settrace(func)

بعد بدء جميع الخيوط من وحدة الخيوط، قم بتعيين وظيفة التتبع.run()قبل إطلاق الدالة، ستقوم هذه الدالة بنقل كل من يُرسل إلى sys.settrace() لكل نواة.

threading.setprofile(func)

بعد بدء جميع النواقل من ملف النواة، قم بتعيين ميزة ملف الإعدادات.run()سيتم تمرير هذه الدالة لكل نواة قبل إجراء sys.setprofile().

threading.stack_size([size])

يعود هذا الدالة بمساحة دمج النواة، ويستخدم عند إنشاء نواة جديدة.

TIMEOUT_MAX للنواة

هذا هو القيمة الثابتة، وهي أقصى قيمة زمن الانتظار لعمليات الحظر (Lock.acquire()، RLock.acquire()، Condition.wait() إلخ).

مثال على البرنامج

import threading
def trace_function():
   النقل الفعلي للوظيفة المتتبعة
   def profile():
      النواة المحددة: ""+str(threading.current_thread().getName())
      class mythread(threading.Thread):
      def __init__(self, thread_name, thread_ID):
         threading.Thread.__init__(self)
         self.thread_name = thread_name
         self.thread_ID = thread_ID
      def run(self):
         print(str(self.thread_ID));
         النواقل النشطة هي:
         النواة الحالية هي: ""+str(threading.current_thread().getName())
         my_thread1 = mythread("PP", 500);
         my_thread2 = mythread("PythonProgram", 1000);
         اسم نواة الرئيسية: ""+str(threading.main_thread().getName())
         التعرف على نواة الرئيسية: ""+str(threading.get_ident())
         print("حجم الدالة = " + str(threading.stack_size()))
      print(threading.settrace(trace_function()))
   threading.setprofile(profile())
my_thread1.start()
my_thread2.start()
print("قائمة التعداد:")
print(threading.enumerate())
print("خروج")

نتيجة الخروج

اسم المحور الرئيسي: المحور الرئيسي
تحديد المحور الرئيسي: 5436
حجم الدالة: 0
مرور الدالة التتبع
لا شيء
ملف الملف: المحور الرئيسي
500
قائمة التعداد 1000: النقاطات النشطة: 6
[<المحور الرئيسي (المحور الرئيسي، بدأ 5436)>, <المحور (Thread-4، بدأ 1960)>, <النبض (Thread-5، بدأ 6452)>, <التحفظ على التاريخ (IPythonHistorySavingThread، بدأ 4304)>, <المحور الخاص بي (Thread-8، بدأ 8460)>, <المحور الخاص بي (Thread-9، بدأ 4668)>]
خروج
النقطة الحالية للمناقشة: نقطة-8
النقاطات النشطة: 5
النقاطة الحالية للمناقشة: نقطة-9
من المحتمل أن تفضلها