1-الجزء الاول أساسيات ال Threading في بايثون


بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته



أساسيات ال Threading في بايثون .



بعض المعلومات :


عندما تطلب تشغيل أي برنامج يقوم نظام التشغيل لينكس بتشغيله وإعطائه رقم تعريف فريد يسمى PID وهي إختصار ل Process ID .

كل Process تحتوي إفتراضيا واحد Thread تسمى Main Thread لاكن ممكن أن يقوم المبرمج بطلب تشغيل أكثر من Thread بشكل متوازي او بشكل إذا صح التعبير عشوائي أي لا يوجد ترابط بين ال Threads أي كل Thread يقوم بعمل معين لوحده يعني هذا الأمر يحدده المبرمج بناءا على ما يناسبه .


ما هو ال Thread ؟


بشكل بسيط لنفترض ال Process هي عملية بناء منزل فيها على الأقل واحد Thread أي عامل واحد يقوم بمهمة معينة إذا أراد المبرمج عمل شيء ما من دون أن يعيق عمل ال Thread الرئيسية كما ذكرت سابقا تسمى Main thread يقوم بعمل Thread أخر أو أكثر للقيام بهذه العملية .

مثال عملي إذا حاولت برمجة برنامج بواجهة رسومية ستعمل الواجهة الرسومية للبرنامج في ال Main thread من اعمالها مثلا تلقي الأحداث وإرسال الإشارات في حال الضغط بمأشر الفأرة مثلا على زر button معين وبعض الأشياء الروتينية والضرورية .

إذا أردت أن تقوم بتشغيل شيء ما يأخذ وقت مثلا عند الضغط على الزر button الفلاني يقوم بتحديث النظام كما نعلم تحديث النظام يأخذ وقت احيانا إذا تم مثلا تشغيل مدير الحزم مثلا dnf أو apt في Main thread ستحصل مشكلة ستتوقف واجهة البرنامج عن تلقي الأحداث وتعلق إلى أن ينتهي مدير الحزم من عمله وأحيانا نظام التشغيل يخبرك أن البرنامج عالق هل تريد قتله أي الخروج منه بالقوة ؟ طبعا هذا ليس جيد لبرنامجك لهذا ستحتاج thread.



الأساسيات بشكل عملي سأضع الصورة وتحتها الشرح .

 نستدعي مكتبة threading ونلاحظ اول دالة Function تعرض عدد ال Thread المفعلة الأن وثاني دالة تعرض قائمة بهذه الThreads المفعلة .

نلاحظ بشكل إفتراضي لا يوجد إلا Thread واحدة والتي هي Main Thread .




 قمت بعمل دالة سميتها f وشغلتها في Thread أخر ثم طلبت من ال Main Thread طباعة كلمة Done نلاحظ أن البرنامج يعمل سطر سطر أولا يشغل ال Thread اخر من خلال دالة start ولا يتم إنتظار دالة f حتى تنتهي أي يتم العودة فورا إلى ال Main Thread ويطبع كلمة Done .

نلاحظ أيضا ان البرنامج أو ال Main Thread لا تخرج حتى تنتهي كل ال Threads اﻷخرى من عملها .


في حال  جعلنا daemon بقيمة True لن ينتظر البرنامج ال Threads الأخرى بل سيتم غلق البرنامج في حالة إنتهاء ال Main Thread من عملها .

ملاحظة ممكن أيضا تعين قيمة daemon من خلال وظيفة setDaemon لاكن يجب إستدعائها قبل وظيفة start .



عمل دالة join هو الإنتظار في مكان إستدعائها حتى ينتهي ال Thread من عمله لهذا نلاحظ أنه لم يتم الرجوع فورا إلى ال Main Thread لطباعة كلمة Done بل تم الأمر عند إنتهاء th من علمها عندها تم تنفيذ كل شيء أسفل مكان إستدعاء دالة join .


 نلاحظ ممكن تمرير البارامترات للدالة من خلال args ونضعهم داخل tuple .

1-قمت بتشغيل أول Thread .

2-قمت بتشغيل ثاني Thread .

3-عملت join لأول Thread .

4-عملت join لثاني Thread .

أي شغلت إثنين Thread ولن يتم الإنتقال لل Main Thread حتى ينتهي الإثنين من عملهم.


 ذات الشيء في الأعلى لاكن هنا نلاحظ ان دالة join لأول Thread تاتي قبل تشغيل ثاني Thread لهذا لن يعمل ثاني Thread حتى تنتهي أول Thread من عملها .



أخيرا ممكن تعين إسم مميز لل Thread وباقي الدوال أو حتى نكون دقيقين باقي الوظائف Method والمتغيرات واضحة من أسمائها .

1-متعير name سبق وشاهدناها في الشرح .

2-متغير daemon سبق وشاهدناها في الشرح .

3- وظيفة setDaemon سبق وشاهدناها في الشرح .

4-وظيفة setName واضحة طريقة أخرى لتحديد الإسم .

5- وظيفة start سبق وشاهدناها في الشرح .

6-وظيفة  join سبق وشاهدناها في الشرح .

7-وظيفة  is_alive و isAlive للإستعلام إذا ما كان ال Thread يعمل بالفعل .

8- isDaemon للإستعلام عن قيمة daemon .

9-وظيفة getName للإستعلام عن إسم ال Thread .

10-متغير ident رقم مميز يميز كل thread.

11-وظيفة run ساتركها للجزء الثاني إن شاء الله شأشرحها في وقتها مع بعض الأمثلة لبرنامج بسيط بواجهة رسومية من خلال مكتبة Gtk+ و بايثون وأمثلة بسيطة عن تبادل المعلومات بين ال Threads المختلفة.




ممكن أن تضيف لمعلوماتك  إقرأ عن ال async function vs sync إبحث في جوجل لتعرف الفرق بين الدوال التي تعمل block لل thread التي تعمل منها والتي لا تعمل block ويمكنك أيضا أن تقرأ مواضيع أخرى عن الأمر بالغة الإنجليزية وأيضا ممكن أن تقرأ عن python multiprocessing و تعرف الفرق بينه وبين ال threading .






















شارك الموضوع

مواضيع ذات صلة

التسميات

2016 (1) 23 (1) 24 (3) 25 (1) 26 (1) 27 (1) 28 (1) 29 (1) 30 (1) 31 (1) إتصال (1) إختراق (2) أدة (1) أدوات (1) إرسال (1) أرش (1) إسترجاع (1) إستعلام (1) أشياء (7) أشياء تفعلها (8) إصدارات (1) إصلاح (6) إصلاحrealtek (1) إضافات (1) إضافة (1) أعجوبة (1) أعجوية (1) إعداد (1) إقاف (2) أقسام (1) ألعاب (2) الفرق (1) الفلاشة (1) القسم هوم (1) الكتابة بالعربية (1) إلى جانب (1) أندرويد (1) إنشاء (1) إنشاء مستودع (1) أيات (1) أيزو (1) أيقومات (1) أيقونات (1) ايقونات (2) باتش (1) بارامتر (1) بايثون (16) برامج (56) برامج إسلامية (2) برنامج (19) برودباند (1) بعد (7) بعد التثبيت (8) بلوتوث (1) بناء (1) بناء توزيعة (1) بيئة عمل (1) تثبيت (29) تجهيز (2) تجهيو من دون (2) تحزيم (2) تحقق (1) تحويل (1) تخصيص (5) ترجمة (2) ترقية (1) تسجيل الشاشة (1) تشغيل (3) تعريف (13) تعطيل (2) تعلم (6) تفعلها (7) تفعيل (2) تقطع الأحرف (1) تقعيل (1) تنزيل (2) تورنت (1) توزيعة (1) توسعة (1) ثيم (5) ثيمات (1) جافا (1) جماليات (7) جنوم (1) حجم (1) حرق (2) حزمة (1) حل (2) دالة (1) دورة (1) روتر (1) ريدهات (2) سكربت (2) شرح (11) صورة متحركة (1) فايرفوكس (1) فتح منفذ (1) فصل (1) فلاشة (3) فيدورا (29) فيدورا بالعربي (1) قاموس (1) كالي (2) كتاب (2) كتب (2) كرت (1) كروت الشاشة (1) كلمة المرور (2) كورس (1) كورورا (1) لعبة (1) لينكس (2) لينكسو (1) ماهو (6) متغير البيئة (1) مجانا (1) محاكات (2) محاكي (1) محمل الإقلاع إصلاح (1) محمول (1) مستودعات (1) مشكلة (2) ملف نصي (1) من إصدار (1) نظام ملفات (1) نمط (2) نواة (1) هجين (4) واجهات (1) وايرلس (1) وهمي (2) ويندوز (2) access token (1) active (2) add (1) after (7) alias (1) andoid studio (1) android (2) android studio (1) Apache (2) appstream (1) arboot (1) arboot fix (1) arch (3) archiso (1) arfedoraccframework (3) arfedoracontrolcenter (3) arfedy (1) atari (1) atom (1) ayat (1) bicon (1) blivet (1) blivet-gui (1) bls (1) bluetooth (1) book (2) books (2) bootloader fix (1) boxes (3) broadband (1) broadcom (1) broadwayd (1) bugzilla (1) build (2) builddep (1) bumblebee (1) bumbleebe (2) burn (2) byzanz (1) c# (1) calamares (1) camera (1) cannot open display (1) cannot open display: :0 (1) ccna (1) cd (2) centos (1) change (2) chsh (1) cisco (1) clion (1) clone (1) code.org (1) command (2) command line (2) commands (2) comps (1) connect (1) contra (1) convert (1) copr (1) could not connect to the debugger (1) cpu (1) cpufreq (1) createrepo (1) csharp (1) css (1) curlew (1) custom (2) dbus (3) dconf (1) dd (1) Decryption (1) defragment (2) desktop (1) desktop entry (1) dictionary (1) Digital signature (1) disks (1) dnf (14) do (7) docker (1) dolphine (1) download (2) downloads manager (1) dply (1) DRI PRIME (1) driver (9) dukto (1) e2fsck (1) efi (4) el forkane (1) elforkane (1) elif (1) emergency (3) emergency mode (3) emulator (1) enable (2) Encryption (1) entries (1) error mounting /dev/sd (1) ext4 (1) extend (1) extensions (2) fakenes (1) fast startup (2) fceux (1) fedora (45) fedora 25 alpha (1) fedora cloude (1) fedora28 (1) fedoraوفيدورا (1) fedy (1) fgmac (2) fgmac-24 (1) file (1) find (1) firefox (2) fix (10) flash mem (1) flash memory (2) flashplayer (1) flatpak (4) forward (1) fpaste (1) free (1) freebsd (1) freevpn (1) function (1) game (3) games (2) gedit (1) genymotion (1) gettext (1) gif (1) gimp (1) gio (1) github (5) github.io (1) glibc-common (1) gmaclinux (2) gnome (16) gnome boxes (1) gnome disk (1) gnome shell (13) gnome terminal (1) gnome-disks (1) gnu (1) godot (1) goldendict (1) google web designer (1) gpg (2) gradio (1) group (2) grub (7) grub2 (1) grubenv (1) gstreamer (1) gtk (8) gtk+ (1) gvrecord (1) hack (2) hash (4) hdmi (3) hibernate (1) home (2) hosspot (1) html (1) http (1) hybrid (2) icon (2) icons (3) ide (1) if (1) install (32) installf (9) installing (7) intellij idea (1) internet downlaod manager (1) iso (2) java (3) jdk (2) jetbrains (1) jetbrains toolbox (1) kali (2) kde (3) kernel (1) kernel parameters (1) key (1) kickstarts (3) korora (1) krita (1) kvm (2) kvm switches (1) lamp (1) laps (1) learn (1) legacy (1) legacy bios (3) libreoffice (2) libvirt (1) life is trange (1) linux (8) lutris (1) lv (1) lvm (2) mac (4) macros (1) mageia (1) make distro (1) mariadb (1) MariaDB and PHP Lamp Server (1) markdown (2) mate terminal (1) mbr (1) md5sum (1) mirro (1) mkconfig (1) mo (1) mono (2) monodevelop (2) mount (1) mp4 (1) multi screen (1) mumble (1) murmur (1) natron (1) nautilus (2) nes (1) netbeans (1) netcut (1) nintendo (1) ntfs (2) nvidia (8) objdesktop (1) ojuba (2) oop (1) opensuse (1) openvpn (1) opera (1) optirun (2) oracle (1) os.path (1) package (2) page (1) pages (1) pantheon (1) parameter (1) parameters (1) password (2) patch (1) path (2) pdf (1) peek (1) photoshop (1) php (1) phpstorm (1) plasma (2) plugin (3) plugins (1) plymouth (1) po (1) polkit (1) port (1) portable (1) portmatp (1) PostinstallerF (1) pot (1) powerline (2) powerline-go (1) preset (1) preview (1) primary display (1) primeos (1) primus (1) primusrun (1) private key (1) programs (3) protonvpn (1) pubg (1) public key (1) put (1) pv (1) pycharm (2) pygobject (4) pygtk (5) python (56) pythonk (1) qdbus (1) qemu (3) qemu-kvm (1) query (1) radio (1) raspberry pi (4) raspbian (2) reclaim space (2) record (1) redhat (3) remix (1) remix os (1) repo (4) repofrompath (1) repository (1) reset (1) resize2fs (1) rhel (1) router (1) rpm (7) rpmbuild (1) rtl8188ee (1) rtl8192c (1) rtl8192ce (1) rtl8192cu (1) rtl8192de (1) rtl8192ee (1) rtl8192se (1) rtl8723ae (1) rtl8723be (1) rtl8723com (1) rtl8821ae (1) rubymine (1) salix (1) scratch (2) scratch2.scratch 2 (1) screencast (1) script (2) seconday display (1) self (1) send (1) server (1) settings (2) sha1256sym (1) sha256sum (1) share desktop (1) shell (2) shortcut (1) shutter (1) skel (1) skel ماهو (1) skype (1) skype.برامج (1) slackware (1) software (1) soundcloud (1) source code (1) spec (2) spin (1) sqlmap (1) ssh (3) sshd (2) st-trans (1) steam (2) store (1) su (1) sudo (2) sudoers (1) swap (2) switch (2) Switchable Graphics (1) synergy (1) systemd (1) systemd preset (1) teamviewer (1) terminal (2) theme (5) things (7) thomson (1) thread (2) threading (2) thumbnails (1) to (8) tor (2) tor browser (1) torrent (1) transfer closed with 736700 bytes remaining to read (1) translation (1) turn off (2) tuxcut (1) txt (1) ubuntu (1) uefi (5) unable to mount location (1) unity (1) unity3d (1) upgrade (1) usb (1) useradd (2) utf-8 (1) vega (1) verify (1) vg (1) vgaوتبديل (1) vi (1) video (1) vim (1) vino (1) virsh (1) virt-install (1) virt-manger (1) virtual (1) virtual box (1) virtualbox (3) vmware (3) vnc server (1) vokoscreen (1) vpn (1) web server (1) webstorm (1) wifi (1) windows (4) windows-1256 (1) wine (1) woeusb (1) X Error: BadAccess (1) X Error: BadDrawable (1) xdg-mime (1) xdman (1) xfce (1) xfconf-query (1) yum (2) zeal (1) zealdocs (1)