Թելերի միացում Python-ում


<h2>Թելերի միացում Python-ում. Ներածություն <p> Թելերի օգտագործումը Python-ում թույլ է տալիս միաժամանակ իրականացնել բազմաթիվ գործընթացներ մեկ ծրագրի շրջանակներում: Օգտագործելով ժամանակակից պրոցեսորների բազմաթիվ միջուկները՝ թելային ծրագրավորումը կարող է ձեր հավելվածն ավելի արագ դարձնել: Այս էսսեում մենք կկենտրոնանանք Python թելերի միացման մեխանիզմի վրա: Python threading-ի հիմնական գաղափարը թելերի միացումն է: Այն հնարավորություն է տալիս հիմնական շարանը հետաձգել ծրագրի ավարտը այնքան ժամանակ, մինչև մյուս բոլոր շղթաները ավարտեն գործարկումը: Python-ում թելերը միանում են «join()» ֆունկցիայի միջոցով:

Թեմաների միացում

Սահմանում

Թելը կատարման եզակի ուղի է, որը կարող է միաժամանակ գործել այլ թելերի հետ: Python-ում «threading.Thread()» ֆունկցիան կատարելով նոր թել է ստեղծվում: Գործառույթը, որը պետք է կատարվի, տրվում է շարանը, երբ այն ձևավորվում է: Քանի դեռ այն չի ավարտվել, գործառույթը կշարունակի աշխատել հիմնական շղթային զուգահեռ: «Threading» մոդուլը ներառում է ներկառուցված մեթոդ, որը կոչվում է «join()», որը թույլ է տալիս հիմնական շարանը սպասել, որ երեխան ավարտի աշխատանքը: Երբ շարանը միանում է, հիմնական շարանը դադարեցնում է կատարումը և սպասում, որ երեխան ավարտվի:

Շարահյուսություն


thread.join(timeout=None)

Բացատրություն

"thread" − «Thread» օբյեկտը, որին ցանկանում եք միանալ, ներկայացված է այս պարամետրով:

'timeout' − Այս կամընտիր արգումենտը սահմանում է վայրկյանների ընթացքում սպասել շարանի ավարտին: Հիմնական շարանը վերսկսում է աշխատանքը, եթե շարանը չի ավարտվում հատկացված ուշացման ժամանակահատվածում: Երբ «Ոչ մեկը» օգտագործվում է որպես լռելյայն տարբերակ, հիմնական շարանը կսպասի անվերջ ժամանակ, մինչև երեխայի շարանը ավարտվի: «Timeout» պարամետրը, որը կամընտիր է, ցույց է տալիս, թե որքան ժամանակ պետք է սպասել շարանի ավարտին: Հիմնական շարանը վերսկսում է աշխատանքը, եթե շարանը չի ավարտվում հատկացված ուշացման ժամանակահատվածում:

Ալգորիթմ

  • Քայլ 1 − Ստեղծեք Thread օբյեկտ և հատկացրեք նրան գործառույթ:

  • Քայլ 2 - Սկսեք շարանը՝ կանչելով start() մեթոդը Thread օբյեկտի վրա:

  • Քայլ 3 - Կանչեք join() մեթոդը Thread օբյեկտի վրա՝ սպասելու շարանը ավարտելուն:

  • Քայլ 4 - Եթե շարանը չի ավարտվել նշված ժամկետի ավարտի ընթացքում, անհրաժեշտության դեպքում կարգավորեք ժամանակի վերջը:

  • Քայլ 5 - Շարունակեք հիմնական թեմայի կատարումը:

Մոտեցում

  • Մոտեցում 1 − join() մեթոդը սպասում է շարանը անսահմանորեն

  • Մոտեցում 2 − join() մեթոդը, որը սպասում է շարանը առավելագույնը 2 վայրկյան:

Մոտեցում 1. join() մեթոդը սպասում է շարանը անսահմանորեն

Այս նկարազարդման մեջ ստեղծվում է շղթա և կատարվում է my_function() ֆունկցիան։ Thread օբյեկտի վրա join() մեթոդն օգտագործվում է սպասելու, որ շարանը ավարտվի, մինչ start() մեթոդը սկսում է շարանը: Ծրագրի արդյունքը կլինի −

Օրինակ


import threading
import time

def my_function():
   print("Starting my_function...")
   time.sleep(5)
   print("Ending my_function...")

t = threading.Thread(target=my_function)

t.start()

print("Before join...")
t.join()
print("After join...")

Արդյունք


Starting my_function...
Before join...
After join...
Thread is still running.
Ending my_function...

Մոտեցման 1-ում, join() մեթոդն օգտագործելիս ժամանակի արգումենտ չկա: Նշանակում է, որ հիմնական շարանը կշարունակի սպասել մինչև մանկական շարանը ավարտվի: Հիմնական շարանը կշարունակվի աշխատել մանկական շարանը ավարտելուց հետո: Երբ դուք ցանկանում եք համոզվել, որ երեխայի շարանը ավարտված է, նախքան հիմնական թելի կատարմանը անցնելը, այս մեթոդը օգտակար է:

Մոտեցում 2. join() մեթոդը սպասում է շարանը առավելագույնը 2 վայրկյան:

Այս նկարազարդման մեջ ստեղծվում է շղթա և կատարվում է my_function() ֆունկցիան։ The thread-ը սկսվում է՝ կանչելով start() ֆունկցիան Thread օբյեկտի վրա, իսկ join() մեթոդը կատարվում է ժամանակի դադարով։

Օրինակ


import threading
import time

def my_function():
   print("Starting my_function...")
   time.sleep(5)
   print("Ending my_function...")

t = threading.Thread(target=my_function)

t.start()

print("Before join...")
t.join(2)
print("After join...")

if t.is_alive():
   print("Thread is still running.")
else:
   print("Thread has completed.")

Արդյունք


Starting my_function...
Before join...
After join...
Thread is still running.
Ending my_function...

Թելը ավարտելու համար պահանջվում է երկրորդ սպասման ժամանակահատված: Ծրագիրը կշարունակի գործել, եթե շարանը չավարտվի 2 վայրկյանից: Այնուհետև ստուգվում է շարանի կարգավիճակը՝ կանչելով is_alive() ֆունկցիան: Ծրագրի արդյունքը ներկայացված է վերևում: Ծրագիրը շարունակեց աշխատել, քանի որ շարանը չավարտվեց 2 վայրկյանի ընթացքում, և is_alive() մեթոդը ցույց տվեց, որ շարանը դեռ ակտիվ է:

Եզրակացություն

Եզրափակելով, թելային ծրագրավորման հիմնական գաղափարը Python-ում թելերի միացումն է: Այն հնարավորություն է տալիս հիմնական շարանը հետաձգել ծրագրի ավարտը այնքան ժամանակ, մինչև մյուս բոլոր շղթաներն ավարտեն աշխատանքը: Python-ի join() մեթոդը, որն օգտագործվում է Thread օբյեկտի վրա, օգտագործվում է թելերը միավորելու համար։ Join() մեթոդի timeout պարամետրը, որը կամընտիր է, ցույց է տալիս, թե որքան ժամանակ պետք է սպասել շարանի ավարտին: Մենք վստահ ենք, որ այս հոդվածը ձեզ ավելի լավ պատկերացում է տվել, թե ինչպես է Python-ը միացնում շարանը:

Մոտեցումների ամփոփման մեջ, 1-ին մոտեցումը անսահման ժամանակ է պահանջում, որպեսզի երեխայի շարանը ավարտվի, բայց 2-րդ մոտեցումը սպասում է մինչև երկու վայրկյան մինչև հիմնական շարանը սկսելը: Որ մեթոդը կընտրեք կիրառելու համար, կախված կլինի ձեր յուրահատուկ պահանջներից և ձեր ծրագրի կազմից: