Italiano
Apri in Telegram

Conversazione سلام من این کدو نوشتم تا زمان اجرای هر thread رو ببینم، بر خلاف تصور هر اجرای thread دقیقا یک ثانیه بعد انجام نمیشه و گا…

9 messaggi · –
Z
سلام من این کدو نوشتم تا زمان اجرای هر thread رو ببینم، بر خلاف تصور هر اجرای thread دقیقا یک ثانیه بعد انجام نمیشه و گاهیی بیشتر از 1 و گاهی کمتر از 1 ثانیه طول میکشه، کسی میدونه چرا؟ import threading import time i=0 def task(): global t_period t_period1 = time.time() - t_period t_period = time.time() t=threading.Timer(1,task) t.start() print( t_period1 ) t_period = time.time() t=threading.Timer(1,task) t.start()
  1. A
    فک کنم درگیر race condition باشه و اینکه thread های پایتون روی یه core اجرا میشن و همزمانی ندارن معمولا 🧐
  2. M
    ثرد ها در پایتون باید GIL رو acquire و release کنن برای همین
    1. Z
      میشه لطفا واضح تر بگید، من متوجه نشدم😶
      1. M
        پایتون یک مکانیزم برای مدیریت حافظه داره به اسم Global interpreter lock یا GIL این گیل یک نوع قفل هست و نمیذاره همزمان دو تا ثرد به آبجکت‌های پایتون در مموری دسترسی داشته باشن برای همین هر ثرد که میخواد اجرا بشه گیل رو میگیره دستش (acquire) و بعدش ولش میکنه release این کار هزینه‌بر هست و خوبی‌ها و بدی‌های خودش رو داره
      2. A
        ببین وقتی اون thread تو دست میذاره رو یجای حافطه که ازش variable رو بخونه. اونجا رو قفل میکنه سیستم تا باعث مشکلات بیشتری نشه. اگه اینکارو نکنه و دو thread باهم یه مقداری رو تغییر بدن کار بهم مخوره مثلا thread اول مقدار ۵ رو میخونه همزمان thread دوم هم نقدار ۵ رو از حافظع میخونه حالا تو مرحله بعد اولی ۲ تا اضافه میکنه بهش.. مقدارش میشه ۷ حالا ۷ رو میذاره توی اون variable همینجا دومی همزمان ۳ تا از اون عدد ۵ ای که خونده بود کم میکنه و میشه ۲ حالا ۲ رو میذاره توی اونجای حافظه و اینجا کاملا اون مقداری که اولی نوشته بود و رونویسی میکنه برای همین قفلش میکنن منابع رو تا در آن واحد ینفر بیشتر بهش دسترسی نداشته باشه تا از این مشکلا جلوگیری شه
PPython + Linux ExpertsPython + Linux Experts@PythonLinuxExperts · gruppo · Tecnologia
4 287membri19scrivono in 30 giorni
Feed della community Apri in Telegram

Un feed pubblico aperto dall'indice di ricerca ChatCrawler — «Google per il Telegram pubblico»; si aggiorna man mano che la community viene scansionata. Orari in UTC.

Solo contenuti pubblici, API ufficiale di Telegram. Informazioni · FAQ · Limiti dell'indice · Rimuovi una pagina · Catalogo · Ricerca · Come calcoliamo