Українська
Відкрити в Telegram

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

9 повідомлень · –
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. В
    فک کنم درگیر race condition باشه و اینکه thread های پایتون روی یه core اجرا میشن و همزمانی ندارن معمولا 🧐
  2. M
    ثرد ها در پایتون باید GIL رو acquire و release کنن برای همین
    1. Z
      میشه لطفا واضح تر بگید، من متوجه نشدم😶
      1. M
        پایتون یک مکانیزم برای مدیریت حافظه داره به اسم Global interpreter lock یا GIL این گیل یک نوع قفل هست و نمیذاره همزمان دو تا ثرد به آبجکت‌های پایتون در مموری دسترسی داشته باشن برای همین هر ثرد که میخواد اجرا بشه گیل رو میگیره دستش (acquire) و بعدش ولش میکنه release این کار هزینه‌بر هست و خوبی‌ها و بدی‌های خودش رو داره
      2. В
        ببین وقتی اون thread تو دست میذاره رو یجای حافطه که ازش variable رو بخونه. اونجا رو قفل میکنه سیستم تا باعث مشکلات بیشتری نشه. اگه اینکارو نکنه و دو thread باهم یه مقداری رو تغییر بدن کار بهم مخوره مثلا thread اول مقدار ۵ رو میخونه همزمان thread دوم هم نقدار ۵ رو از حافظع میخونه حالا تو مرحله بعد اولی ۲ تا اضافه میکنه بهش.. مقدارش میشه ۷ حالا ۷ رو میذاره توی اون variable همینجا دومی همزمان ۳ تا از اون عدد ۵ ای که خونده بود کم میکنه و میشه ۲ حالا ۲ رو میذاره توی اونجای حافظه و اینجا کاملا اون مقداری که اولی نوشته بود و رونویسی میکنه برای همین قفلش میکنن منابع رو تا در آن واحد ینفر بیشتر بهش دسترسی نداشته باشه تا از این مشکلا جلوگیری شه
PPython + Linux ExpertsPython + Linux Experts@PythonLinuxExperts · група · Технології
4 287учасників19пишуть за 30 днів
Стрічка майданчика Відкрити в Telegram

Відкрита публічна стрічка з пошукового індексу ChatCrawler — «Google по публічному Telegram»; оновлюється в міру обходу майданчика. Час — UTC.

Лише публічний контент, офіційний API Telegram. Про проєкт · Питання · Межі індексу · Прибрати сторінку з видачі · Каталог · Пошук · Як ми рахуємо