ما پایتون ورکرز (Python Workers) را دو سال پیش معرفی کردیم و راهی برای اجرای برنامههای پایتون (run Python applications) در محیط اجرای کلودفلر ورکرز (Cloudflare Workers runtime) فراهم کردیم. هدف ما این بود که نوشتن ورکرها به زبان پایتون به سادگی تایپاسکریپت (TypeScript) باشد و اکوسیستم بستهها و فریمورکهای پایتون «به خودی خود کار کنند».
امروز، پایتون ورکرز اکنون به صورت عمومی (GA) در دسترس است.
انتشار عمومی (GA) به چه معناست؟ این یعنی پایتون اکنون یک زبان درجه یک و کاملاً پشتیبانیشده در پلتفرم توسعهدهندگان کلودفلر (Cloudflare Developer Platform) است. شما میتوانید کدهای پایتون، کتابخانهها و الگوهای طراحی خود را که از قبل میشناسید بیاورید و آنها را بهطور یکپارچه به ورکرز هوش مصنوعی (Workers AI)، آر۲ (R2)، دی۱ (D1)، هایپردرایو (Hyperdrive)، آبجکتهای بادوام (Durable Objects)، صفها (Queues)، جریانهای کاری (Workflows) و بقیه پلتفرم کلودفلر (Cloudflare) متصل کنید. شما همچنین میتوانید فریمورکهای محبوب پایتون مانند فستآپی (FastAPI)، جنگو (Django) و فلاسکو (Flask) را در پایتون ورکرز اجرا کنید. حتی میتوانید یک پایتون ورکر را در داخل یک ورکر دیگر با استفاده از ورکرهای پویا (Dynamic Workers) ایجاد کنید.
مسیر پشت پرده پایتون ورکرز
آوردن پایتون به کلودفلر ورکرز یک انتخاب طبیعی بود. از آنجایی که ورکرز از وباسمبلی از سال ۲۰۱۸ (WebAssembly on Cloudflare Workers) پشتیبانی میکند، محیطی عالی برای اجرای مفسر پایتون کامپایلشده با وباسمبلی (Wasm) را در اختیار ما قرار داد. با استفاده از پایواید (Pyodide)، توانستیم به سرعت طیف وسیعی از برنامههای پایتون را در کلودفلر ورکرز پشتیبانی کنیم.
هدف ما ایجاد اولین پلتفرم برای برنامههای پایتون با قابلیت مقیاسپذیری بیinfinit هوشمند، در عین سادگی و کارایی توسعه برنامههای پایتون مانند هر جای دیگری بود.
ویژگیهایی که امروز برجسته میکنیم نتیجه این تلاش چندساله است. بسیاری از توسعهدهندگان در حال حاضر در حال ساخت برنامهها در پایتون ورکرز هستند؛ امروز، ما این قابلیتها را برای استفاده همگانی در محیط تولید (Production-ready) آماده میکنیم.
پایتون اکنون یک زبان درجه یک در محیط اجرای کلودفلر ورکرز است
پایتون ورکرز اکنون به طور بومی از بایندینگهای پلتفرم توسعهدهندگان کلودفلر (Cloudflare Developer Platform bindings) پشتیبانی میکند. پیش از این، استفاده از این بایندینگهای کلودفلر در پایتون ورکرز نیازمند تبدیل صریح اشیاء پایتون به اشیاء تایپاسکریپت در مرز ارتباطی RPC بود. برای مثال، ارسال یک دیکشنری پایتون به یک صف کلودفلر (Cloudflare Queue) نیازمند کد چسباننده (glue code) زیر بود:
این امر مستلزم آن بود که توسعهدهندگان پایتون در حین نوشتن پایتون ورکرز، محیط و کد جاوا اسکریپت (JavaScript) را در نظر داشته باشند و این منبع رایج خطا برای انسانها و عوامل هوش مصنوعی (AI agents) بود. برای رفع این مشکل، ما کل فرآیند تبدیل نوع را کپسوله کردهایم (encapsulated the entire type conversion process) که درون محیط اجرای ورکرز و کیاسدی پایتون (Python SDK) قرار دارد. این به شما اجازه میدهد تا از تمام بایندینگهای کلودفلر به روشی پایتونیک و بدون نوشتن حتی یک خط کد جاوا اسکریپت استفاده کنید، به طوری که کد زیر به سادگی کار کند:
فریمورکهای وب: فستآپی، جنگو و فلاسکو
اکنون میتوانید فریمورک وب پایتون مورد علاقه خود، مانند فستآپی (FastAPI)، جنگو (Django) یا فلاسکو (Flask) را برای ساخت یک سرور ایپیآی (API server) در پایتون ورکرز اجرا کنید. ما یک کانکتور داخلی پیادهسازی کردهایم که میتوانید از آن برای اتصال آسان برنامه وب خود به پایتون ورکرز استفاده کنید.
فرض کنید یک برنامه وب ساده با فستآپی دارید:
در محیطهای بومی، شما از یک وبسرور مانند uvicorn برای اجرای این برنامه استفاده میکنید.
در پایتون ورکرز، شما میتوانید همین برنامه را با استفاده از پکیج workers.asgi که ما ارائه میدهیم، تنها با اضافه کردن این قطعه کد به کادتان اجرا کنید:
به همین ترتیب، میتوانید از پکیج workers.wsgi برای اجرای برنامههای وب همگام (synchronous) مانند جنگو استفاده کنید.
بنابراین، زیر کاپ چه اتفاقی میافتد؟
پایتون دارای یک قرارداد استاندارد برای نحوه ارتباط برنامههای وب با وبسرورها است که به نام رابط دروازه وبسرور (WSGI) یا همتای مدرن و ناهمگام آن، ASGI شناخته میشود. این استاندارد به توسعهدهندگان اجازه میدهد برنامههایی بسازند که کاملاً مستقل از سرور هستند. در یک استقرار سنتی، وبسرورهایی مانند Uvicorn یا Gunicorn مسئول مدیریت چندین اتصال و ترد همزمان مشتری برای مقیاسبندی ترافیک هستند، در حالی که فریمورکهای وب مانند FastAPI میتوانند صرفاً روی منطق برنامه تمرکز کنند.
در کلودفلر ورکرز، خود پلتفرم ورکرز به عنوان وبسرور عمل میکند. از آنجایی که شبکه جهانی ما از قبل به طور یکپارچه بارگذاری (load balancing) و مقیاسپذیری بینهایت را مدیریت میکند، نیازی به اختراع مجدد چرخ با اجرای یک سرور در داخل پایتون ورکرز نداریم.
در عوض، کانکتورهای workers.asgi و workers.wsgi ما به عنوان یک پل نازک و بهینه عمل میکنند. آنها درخواست بومی ورودی جاوا اسکریپت را به ساختارهای استاندارد WSGI/ASGI که برنامههای پایتون انتظار دارند ترجمه میکنند و پاسخ را با حداقل سربار به بیرون هدایت میکنند. با انجام این کار، توسعهدهندگان پایتون بهترینهای هر دو دنیا را به دست میآورند: شما میتوانید کد را با استفاده از فریمورکهای وب مورد علاقه خود بنویسید و سازماندهی کنید، در حالی که اجازه میدهید پلتفرم کلودفلر ورکرز به طور آنی ایپیآی شما را در سرتاسر جهان مقیاسبندی کند، بدون اینکه حتی یک سرور را پیکربندی کنید.
این کانکتورها را میتوان نه تنها با فستآپی، جنگو یا فلاسکو، بلکه با هر فریمورک وب پایتونی که از رابط WSGI یا ASGI استفاده میکند، به کار برد.
شما میتوانید اطلاعات بیشتر در مورد استفاده از هر فریمورک وب را در مستندات پایتون ورکرز (Python Workers documentation) پیدا کنید.
استفاده از پستگرسکیوال (PostgreSQL) و مایاسکیوال (MySQL) با هایپردرایو (Hyperdrive)
اگر در حال ساخت یک برنامه پایتون با استفاده از پایگاههای داده رابطهای مانند پستگرسکیوال (PostgreSQL) یا مایاسکیوال (MySQL) هستید، اکنون میتوانید هایپردرایو (Hyperdrive) را در پایتون ورکرز ادغام کنید.
پیش از این، پایتون ورکرز از سوکتهای TCP پشتیبانی نمیکرد و در نتیجه درایورهای پایگاه داده در دسترس نبودند. برای درک اینکه چرا این یک مانع بود، باید به نحوه عملکرد وباسمبلی نگاه کنید. درایورهای پایگاه داده پایتون مانند aiomysql یا asyncpg به ماژول socket کتابخانه استاندارد برای برقراری ارتباط متکی هستند. در یک محیط استاندارد، این ماژول فراز سیستمعامل POSIX را به سیستمعامل زیرین انجام میدهد. در داخل یک سندباکس وباسمبلی، آن فراخوانیهای سیستمی شبکه POSIX معمولاً استابهایی (stubs) هستند که همیشه با شکست مواجه میشوند. هر تلاشی برای باز کردن یک سوکت استاندارد بلافاصله با شکست مواجه میشود. برای حل این مشکل، ما فراخوانیهای سیستمی سوکت را با استفاده از ایپیآی اتصال (connect) ورکرز پیادهسازی کردیم.
هنگامی که یک درایور پایگاه داده تلاش میکند یک اتصال TCP باز کند، از طریق پیادهسازی سفارشی فراخوانی سیستم سوکت ما عبور میکند. این عملیات استاندارد سوکت پایتون مانند باز کردن اتصال و خواندن بایتها را به فراخوانیهای جاوا اسکریپت مربوطه که توسط محیط اجرای ورکرز استفاده میشوند، ترجمه میکند. از آنجایی که این ترجمه در سطح فراخوانی سیستم اتفاق میافتد، درایورهای پایگاه داده شما اصلاً نیازی به دانستن در مورد پیادهسازی زیرین ندارند.
این پل سوکت همان چیزی است که ادغام هایپردرایو ما را ممکن میسازد. برای استفاده از هایپردرایو در پایتون ورکرز، ابتدا پایگاه داده خود را با هایپردرایو متصل کرده و بایندینگ را در تنظیمات Wrangler تنظیم کنید:
سپس، با استفاده از درایورهای پایگاه دادهای که با آنها آشنا هستید، به هایپردرایو متصل شوید:
میتوانید برای اطلاع از نحوه استفاده از هایپردرایو در پایتون ورکرز و اینکه چه پکیجهایی در حال حاضر پشتیبانی میشوند، به مستندات پایون ورکرز هایپردرایو (Hyperdrive Python Workers documentation) مراجعه کنید.
گسترش اکوسیستم پکیج وباسمبلی
از آنجایی که پایتون ورکرز در داخل یک سندباکس وباسمبلی اجرا میشوند، هر بستهای با افزونههای بومی C/C++/Rust باید برای اجرا در پایتون ورکرز به وباسمبلی کراس کامپایل (cross-compiled) شود. با این حال، پیش از این، هیچ روش استانداردی برای کراس کامپایل کردن هیچ پکیج پایتونی به وباسمبلی وجود نداشت. این بدان معنا بود که تیم ما مجبور بود پکیجهای سفارشی وباسمبلی را به صورت دستی کامپایل و میزبانی کند. این امر تعداد پکیجهایی را که واقعاً میتوانید در پایتون ورکرز استفاده کنید به شدت محدود میکرد.
ما میخواستیم این مشکل را حل کنیم و به کاربران اجازه دهیم از طیف گستردهتری از پکیجها استفاده کنند. با این حال، ما نمیخواستیم صرفاً بستههایی بسازیم که تنها در پایتون ورکرز قابل استفاده باشند، چرا که به جامعه کمکی نمیکرد. از آنجایی که پایتون ورکرز بر روی پایواید (Pyodide) ساخته شدهاند، ما میخواستیم اکوسیستم به گونهای تکامل یابد که به پایواید و کل جامعه پایتون روی وباسمبلی سود برساند.
برای این منظور، ما PEP 783 را پیشنهاد کردیم که پلتفرمی را برای اجرای پایتون در محیطهای اجرای مرورگر به نام PyEmscripten استانداردسازی میکند. پس از بیش از یک سال بحث و اصلاح، این پیشنهاد پذیرفته شد و به نگهدارندگان بستهها اجازه داد تا بستههایی را برای پلتفرم PyEmscripten بسازند و منتشر کنند و آنها را در تمام محیطهایی که PyEmscripten را پیادهسازی میکنند، در دسترس قرار دهند.
ما همچنین زنجیره ابزار ساخت پایواید موجود را تثبیت کردیم و آن را به شکلی تکامل دادیم که برای تمامی نگهدارندگان بستهها قابل دسترسی باشد و به توسعهدهندگان اجازه دهد به راحتی بستهها را برای پلتفرم PyEmscripten بسازند. علاوه بر این، ما پشتیبانی از پلتفرم PyEmscripten را به cibuildwheel اضافه کردیم تا پذیرش پشتیبانی از پلتفرم PyEmscripten برای دیگران آسانتر شود.
در حالی که اکوسیستم هنوز در حال پذیرش این استاندارد است، ما امیدواریم که هر پکیج پایتونی دارای یک فایل چرخ (wheel) باشد که در آینده با وباسمبلی کار کند. ما همچنین به طور فعال با نگهدارندگان اصلی بستهها برای اضافه کردن بیلدهای PyEmscripten کار میکنیم. اگر با پکیجی روبرو شدید که هنوز پشتیبانی نمیشود، آن را در دیسکورد (Discord) یا گیتهاب (GitHub) به ما اطلاع دهید و تیم ما برای ساخت آن تلاش خواهد کرد.
همچنین میتوانید سخنرانی یوروپایتون ۲۰۲۶ ما: «پایتون همهجا: وضعیت پایتون روی وباسمبلی» (EuroPython 2026 talk: “Python Everywhere: The State of Python on WebAssembly”) را بررسی کنید تا ببینیم چگونه این کار را ممکن ساختهایم.
ساخت ایجنتهای هوش مصنوعی و خطوط لوله در پایتون
اکوسیستم بزرگ بستههای علم داده و یادگیری ماشین، پایتون را به انتخابی طبیعی برای ساخت ایجنتهای هوشمند و خطوط لوله هوش مصنوعی تبدیل میکند. اما آوردن این موارد به پایتون ورکرز از نظر تاریخی یک چالش ایجاد کرده بود: کتابخانههایی مانند openai و langchain برای برقراری ارتباط با ایپیآیهای خارجی به کلاینتهای HTTP مانند requests یا httpx متکی هستند. با این حال، به دلیل عدم پشتیبانی از عملیات سوکت سطح پایین در پایتون ورکرز، این کلاینتهای HTTP به درستی کار نمیکردند.
برای حل این مشکل، ما در بخش آپاستریم مشارکت کردیم تا اطمینان حاصل کنیم که این کلاینتهای HTTP میتوانند درخواستها را مستقیماً از طریق ایپیآی fetch جاوا اسکریپت در محیطهای وباسمبلی هدایت کنند. در ترکیب با پشتیبانی جدید ما از عملیات سوکت سطح پایین همانطور که در بخش قبلی توضیح داده شد، این امر باعث میشود کل پشته شبکه به طور یکپارچه در پایتون ورکرز کار کند.
در نتیجه، اکنون میتوانید کتابخانههای هوش مصنوعی مانند openai، langchain و mcp را به صورت بومی در پایتون ورکرز اجرا کنید. همچنین میتوانید آنها را با ورکرز هوش مصنوعی (Workers AI) ترکیب کنید تا استنتاج بدون سرور (serverless inference) را روی جیپییوها در شبکه کلودفلر اجرا کنید، یا درخواستها را از طریق دروازه هوش مصنوعی کلودفلر (Cloudflare AI Gateway) پروکسی کنید.
مثال زیر راهی برای اجرای مدلهای ورکرز هوش مصنوعی در لانگچین (langchain)، با استفاده از پکیج langchain-cloudflare را نشان میدهد:
آنچه میتوانید امروز بسازید
ما مجموعهای از الگوهای آماده برای تولید (production-ready patterns) را در مخزن python-workers-examples خود گردآوری کردهایم. در ادامه برخی از راههایی که میتوانید پایتون ورکرز را با اکوسیستم کلودفلر ترکیب کنید، آورده شده است.
ارکستراسیون ناهمگام هوش مصنوعی
ساخت یک برنامه هوش مصنوعی فولاستک اغلب به معنای اتصال چندین سرویس مانند ذخیرهسازی، صفبندی و استنتاج است. این مثال نشان میدهد که چگونه یک مولد تصویر به تصویر مبتنی بر هوش مصنوعی را صرفاً در پایتون ورکرز بسازید. این برنامه درخواستهای کاربر را میپذیرد، آنها را در یک صف کلودفلر (Cloudflare Queue) قرار میدهد، و از جریانهای کاری (Workflows) برای ارکستراسیون مرحله تولید تصویر از طریق ورکرز هوش مصنوعی (Workers AI) استفاده میکند و تصویر را در یک باکت آر۲ (R2 bucket) ذخیره میکند.
پردازش جریان بلادرنگ با بلو اسکای جتاستریم (Bluesky Jetstream)
مصرف یک جریان سیلآسا از رویدادهای بلادرنگ معمولاً نیازمند یک سرور اختصاصی برای حفظ اتصال است. در این مثال، ما از یک پایتون ورکر برای اتصال به وبسوکت ATProto/Bluesky Jetstream استفاده میکنیم. با پشتیبانی از این اتصال توسط یک آبجکت بادوام (Durable Object)، پایتون ورکر میتواند وضعیت طولانیمدت را حفظ کند و اطمینان حاصل کند که اتصال وبسوکت زنده میماند.
مثالهای بیشتر برای بررسی
سرور پروتکل زمینه مدل (MCP)
یک سرور MCP بسازید و مستقر کنید (Build and deploy an MCP server) با استفاده از پکیج رسمی MCP پایتون تا به دستیاران هوش مصنوعی خود دسترسی به دادههای لبه (edge data) را بدهید.
سیستم تولید افزوده بازیابی (RAG) با وکتورایز (Vectorize)
ساخت یک سیستم RAG (Building a RAG system) با استفاده از ورکرز هوش مصنوعی و وکتورایز (Vectorize)، پایگاه داده برداری کلودفلر.
نمونه کدهای پایتون در سراسر مستندات توسعهدهنده کلودفلر
ما مستندات خود را در سراسر محصولات کلودفلر بهروزرسانی کردهایم تا کدهای نمونه پایتون را شامل شوند. تقریباً در هر جایی که نمونه کدی وجود دارد که نحوه انجام کاری را در تایپاسکریپت نشان میدهد، نمونه کد پایتون نیز وجود دارد. ما متعهد هستیم که به گنجاندن نمونه کدهای پایتون در تمام محصولات خود ادامه دهیم. شما میتوانید قطعه کدهای بین جاوا اسکریپت، تایپاسکریپت و پایتون را در سراسر مستندات توسعهدهنده ما جابجا کنید.
قدم بعدی چیست؟
رسیدن به انتشار عمومی (GA) تازه شروع کار است. ما برنامههای زیادی برای بهتر کردن پایتون ورکرز داریم، از جمله کارآمدتر کردن پایتون ورکرز از نظر عملکردی و حافظه، و همچنین پشتیبانی از بستههای بیشتر.
به گفتن اینکه چه چیزی میخواهید روی پایتون ورکرز بسازید ادامه دهید، و ما همچنان مرزهای آنچه ممکن است را جلو خواهیم برد. مستندات پایتون ورکرز (Python Workers documentation) را بررسی کنید و ساخت اولین پایتون ورکر خود را شروع کنید!
منبع: blog.cloudflare.com
