نتایج کدها روی مفسر من با نتایج کدها در ویدیو متفاوت بود
ایجاد شده در ۲۲ بهمن ۱۴۰۲
من با نوشتن دقیقا همین کدها به نتایج متفاوتی رسیدم که اکثر مواقع مشکل باگ بود
وقت بخیر برای بررسی این مسئله فاکتورهای مختلفی وجود داره اما نتایج حاصل پیاده سازی 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()
'''
وقتی من کیو را قبل از نوشتن تابع مقدار دهی نمیکنم تابع با کیوی خالی کار میکند
اما وقتی استاد کیو را بعد از تابع پر میکند، تابع با کیوی پر شده کار میکند
'''