GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing python.github.io — asyncio و پایتون نخآزاد asyncio و پایتون نخآزاد¶asyncio از یک حلقه رویداد بهعنوان زمانبند استفاده میکند تا با جابهجایی بین وظایف و امکانپذیر ساختن عملیات ورودی/خروجی غیرمسدودکننده، همروندی بسیار کارآمدی را فراهم کند. این امر باعث عملکرد بهتر در موارد استفاده محدود به ورودی/خروجی میشود. همچنین امکان واگذاری کارهای محدود به CPU به یک استخر نخ یا فرایند را فراهم میکند، اما این کار در CPython همچنان محدود به قفل سراسری مفسر است. با این حال، در free-threaded Python، GIL غیرفعال است و پایتون میتواند کد چندنخی واقعی را اجرا کند. این بدان معناست که asyncio اکنون میتواند از چندین هسته CPU بدون محدودیتهای اعمالشده توسط GIL بهره ببرد. از پایتون ۳.۱۴، asyncio پشتیبانی درجهیک از پایتون نخآزاد دارد و پیادهسازی asyncio برای استفاده در محیط چندنخی ایمن است. یک حلقه رویداد واحد روی یک هسته میتواند اتصالهای زیادی را بهطور همروند مدیریت کند، اما کد پایتونی که برای مدیریت هر یک اجرا میشود همچنان بهصورت متوالی اجرا میشود. هنگامی که درخواستها شامل مقدار قابلتوجهی محاسبه بهازای هر درخواست شوند، مدیریت آنها به گلوگاه تبدیل میشود و یک هسته دیگر نمیتواند پاسخگو باشد. ترکیب asyncio با نخها در اینجا بیشترین کاربرد را دارد: با اجرای یک حلقه رویداد بهازای هر نخ، مدیریت درخواستهای مختلف میتواند بهصورت موازی روی چندین هسته CPU اجرا شود. همچنین زمانی که نیاز دارید کد مسدودکننده یا محدود به CPU را از یک برنامه asyncio اجرا کنید، مفید است. همچنین ببینید Scaling asyncio on Free-Threaded Python، یک پست وبگزارشی از Kumar Aditya که تغییرات داخلیای را توضیح میدهد که باعث ایمن و کارآمد شدن asyncio در پایتون نخآزادی (Free-Threaded Python) میشوند، بههمراه بنچمارکهایی از بهبودهای حاصل. ملاحظات ایمنی نخها¶هرچند asyncio بهگونهای طراحی شده است که در یک محیط پایتون نخآزاد (free-threaded) امن از نظر نخها (thread-safe) باشد، اما همچنان هنگام استفاده از asyncio با نخها ملاحظاتی وجود دارد که باید آنها را در نظر داشته باشید:
استفاده از asyncio با نخها¶asyncio از اجرای یک حلقه رویداد به ازای هر نخ پشتیبانی میکند، که به شما امکان میدهد در یک محیط پایتون نخآزادی از چندین هسته CPU بهره ببرید. هر نخ میتواند حلقه رویداد خود را اجرا کند، و وظایف میتوانند بهطور مستقل روی آن حلقهها زمانبندی شوند. در اینجا مثالی از نحوهی استفاده از asyncio با نخها آمده است: import asyncio import threading async def worker(name: str) -> None: print(f"Worker {name} starting") await asyncio.sleep(1) print(f"Worker {name} done") def run_loop(name: str) -> None: asyncio.run(worker(name)) threads = [ threading.Thread(target=run_loop, args=(f"T{i}",)) for i in range(4) ] for t in threads: t.start() for t in threads: t.join() در این مثال، هر نخ حلقه رویداد خود را با تولیدکننده/مصرفکننده بین نخها¶هنگامی که یک نخ معمولی (غیر asyncio) نیاز دارد کاری را به یک حلقهی رویداد asyncio که در نخ دیگری اجرا میشود بسپارد، از یک سازوکار اولیهی ایمن برای نخ مانند import asyncio import queue import threading def producer(q: queue.Queue[int]) -> None: for i in range(5): print(f"Producing {i}") q.put(i) q.shutdown() async def consumer(q: queue.Queue[int]) -> None: while True: try: item = q.get_nowait() except queue.Empty: await asyncio.sleep(0.1) continue except queue.ShutDown: break print(f"Consumed {item}") await asyncio.sleep(item) q: queue.Queue[int] = queue.Queue() consumer_thread = threading.Thread( target=lambda: asyncio.run(consumer(q)) ) consumer_thread.start() producer(q) consumer_thread.join() تولیدکننده روی نخ اصلی اجرا میشود، در حالی که مصرفکننده درون یک حلقه رویداد روی نخ اختصاصی خود اجرا میشود، با این حال آنها بهصورت امن از طریق
© حق نشر 2001 Python Software Foundation.
این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است. مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز بدون بند BSD منتشر شدهاند. برای اطلاعات بیشتر به تاریخچه و مجوز مراجعه کنید. بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است. لطفاً کمک مالی کنید. آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC). آیا اشکالی یافتید؟ ساخته شده با Sphinx 9.1.0. |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |