🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ Alireza Maleki
نتایج کدها روی مفسر من با نتایج کدها در ویدیو متفاوت بود
جامعه پایتون (وب) ایجاد شده در ۲۲ بهمن ۱۴۰۲

من با نوشتن دقیقا همین کدها به نتایج متفاوتی رسیدم که اکثر مواقع مشکل باگ بود

وقت بخیر
برای بررسی این مسئله فاکتور‌های مختلفی وجود داره اما نتایج حاصل پیاده سازی multi process و concurrency بستگی به تعداد هسته که شما در اختیارش هم میزارید داره.
دقیقا چه چیزی متفاوت بوده؟ اگر ترتیب هست درسته توی دروس اینده دلیلش رو یادخواهید گرفت. 

Reza Mobaraki ۲۲ بهمن ۱۴۰۲، ۱۹:۱۲
import multiprocessing
import time
q = multiprocessing.Queue()
for i in range(10):
    q.put(i)
def b(worker):
    while True:
        job_id = q.get()
        time.sleep(2)
        print(f'{job_id=}, {worker=}')
        if q.empty():
            break
if __name__ == '__main__':
    for i in range(4):
        p = multiprocessing.Process(target=b, args=(i,))
        p.start()
'''
خروجی من:
job_id=0, worker=0
job_id=0, worker=1
job_id=0, worker=2
job_id=0, worker=3
job_id=1, worker=0
job_id=1, worker=1
job_id=1, worker=2
job_id=1, worker=3
job_id=2, worker=0
job_id=2, worker=1
job_id=2, worker=2
job_id=2, worker=3
job_id=3, worker=0
job_id=3, worker=1
job_id=3, worker=2
job_id=3, worker=3
job_id=4, worker=0
job_id=4, worker=1
job_id=4, worker=2
job_id=4, worker=3
job_id=5, worker=0
job_id=5, worker=1
job_id=5, worker=2
job_id=5, worker=3
job_id=6, worker=0
job_id=6, worker=1
job_id=6, worker=2
job_id=6, worker=3
job_id=7, worker=0
job_id=7, worker=1
job_id=7, worker=2
job_id=7, worker=3
job_id=8, worker=0
job_id=8, worker=1
job_id=8, worker=2
job_id=8, worker=3
job_id=9, worker=0
job_id=9, worker=1
job_id=9, worker=2
job_id=9, worker=3
الان هر کار را هر چهار وورکر انجام می‌دهند در صورتی که در ویدیو هر کار را یک وورکر انجام می‌داد
این مشکل اول بنده است
'''
Alireza Maleki ۲۴ بهمن ۱۴۰۲، ۱۶:۴۷
import multiprocessing
import time
q = multiprocessing.Queue()
def b(worker):
    while True:
        job_id = q.get()
        time.sleep(2)
        print(f'{job_id=}, {worker=}')
        if q.empty():
            break
if __name__ == '__main__':
	for i in range(10):
    	q.put(i)
     for i in range(4):
        p = multiprocessing.Process(target=b, args=(i,))
        p.start()
'''
 	وقتی من کیو را قبل از نوشتن تابع مقدار دهی نمی‌کنم تابع با کیوی خالی کار می‌کند
 	اما وقتی استاد کیو را بعد از تابع پر می‌کند، تابع با کیوی پر شده کار می‌کند
'''
Alireza Maleki ۲۴ بهمن ۱۴۰۲، ۱۶:۵۱