يعد uvloop بديلاً سريعًا وحلقة الأحداث المضمنة غير المتزامنة. يتم تنفيذ uvloop في Cython ويستخدم libuv تحت الغطاء.
يمكن العثور على وثائق المشروع هنا. يرجى أيضا مراجعة الويكي.
uvloop يجعل المزامنة أسرع 2-4 مرات.
يوضح الرسم البياني أعلاه أداء خادم الصدى بأحجام مختلفة للرسائل. يستخدم معيار المقابس أساليب loop.sock_recv()
و loop.sock_sendall()
؛ يستخدم معيار التدفقات تدفقات عالية المستوى غير متزامنة، تم إنشاؤها بواسطة وظيفة asyncio.start_server()
؛ ويستخدم معيار البروتوكول loop.create_server()
مع بروتوكول صدى بسيط. اقرأ المزيد عن uvloop في تدوينة حول هذا الموضوع.
يتطلب uvloop إصدار Python 3.8 أو أحدث وهو متاح على PyPI. استخدم النقطة لتثبيته:
$ نقطة تثبيت uvloop
لاحظ أنه يوصى بشدة بترقية النقطة قبل تثبيت uvloop باستخدام:
$ نقطة تثبيت -U نقطة
اعتبارًا من الإصدار 0.18 من uvloop، الطريقة المفضلة لاستخدامه هي عبر الوظيفة المساعدة uvloop.run()
:
import uvloop
async def main ():
# Main entry-point.
...
uvloop . run ( main ())
يعمل uvloop.run()
ببساطة عن طريق ضبط asyncio.run()
لاستخدام uvloop، وتمرير كافة الوسائط إليه، مثل debug
، على سبيل المثال uvloop.run(main(), debug=True)
.
مع Python 3.11 والإصدارات الأقدم، يمكن استخدام المقتطف البديل التالي:
import asyncio
import sys
import uvloop
async def main ():
# Main entry-point.
...
if sys . version_info >= ( 3 , 11 ):
with asyncio . Runner ( loop_factory = uvloop . new_event_loop ) as runner :
runner . run ( main ())
else :
uvloop . install ()
asyncio . run ( main ())
لإنشاء uvloop، ستحتاج إلى Python 3.8 أو أحدث:
استنساخ المستودع:
$ git clone --recursive [email protected]:MagicStack/uvloop.git $ مؤتمر نزع السلاح uvloop
إنشاء بيئة افتراضية وتفعيلها:
$ python3 -m venv uvloop-dev $ المصدر uvloop-dev/bin/activate
تثبيت تبعيات التطوير:
تثبيت النقطة $ -e .[dev]
بناء وتشغيل الاختبارات:
$ جعل $ إجراء الاختبار
uvloop مرخص بشكل مزدوج بموجب تراخيص MIT وApache 2.0.