Öncelikle biraz arka plan, Bir kilitleme soketi varsayılan türden bir yuvadır, bir kez uygulamanızı okumaya başladığınızda veya iş parçacığı gerçekten okunana kadar kontrole geri dönmez veya bağlantınız kesilir. python-requests
, varsayılan olarak bu şekilde çalışır. Engelleme olmayan okumalar sağlayan grequests
adı verilen bir sıkma var.
Önemli mekanik fark, herhangi bir şey yapmadan göndermek, yeniden bağlamak, bağlanmak ve kabul etmektir. Seçtiğiniz bir numaranız var. Dönüş kodunu ve hata kodlarını kontrol edebilir ve genellikle kendiniz çıldırırsınız. Bana inanmıyorsanız, denemek bazen
Kaynak: https://docs.python.org/2/howto/sockets.html
Ayrıca söylemeye devam ediyor:
en hızlı priz kod kullandığı şüphe yok engellenmeyen soketler ve onları çoğaltmak için seçin. 'u bir LAN bağlantısını, CPU'yu zorlamadan doyurabilecek bir şey koyabilirsiniz. Sorun şu ki, bu şekilde yazılmış bir uygulama 'dan başka bir şey yapamaz. Bu, tüm kez baytları karıştırmaya hazır olmalıdır.
ise kendi yumurtası onu alarak uygulama aslında parçacığı optimal çözüm
olduğunu, daha fazla bir şey yapmak gerekiyordu Ama görünümünüze karmaşıklık bir sürü eklemek ister misiniz olduğunu varsayarsak İş Parçacığı. Özellikle ne zaman guneycorn async workers?
Asenkron işçiler Greenlets'e dayanmaktadır ( Eventlet ve Gevent aracılığıyla). Greenlets, Python için kooperatif çoklu iş parçacığının bir uygulamasıdır. Genel olarak, bir uygulama bu işçi sınıflarını hiçbir değişiklik yapmadan kullanmak için yapmalıdır.davranış
ve
bazı örnekler asenkron işçi gerektiren: Uzun engelleme aramaları (Yani, dış web hizmetleri)
yapma Uygulamaları Yani kısa uzun bir hikaye kesmek için, Don' Bir şeyi değiştir! Sadece olsun. Herhangi bir değişiklik yaparsanız, önbelleğe almayı tanıtmak olsun. Python istek geliştiricileri tarafından önerilen bir uzantıyı Cache-control kullanmayı düşünün.
Burada ne beklersiniz? Eğer henüz almadıysanız istemciye bir şey geri dönemezsiniz –
Ben async yapmak için bekliyordum böylece süper yavaş api için beklerken cpu gücü potansiyel olarak gidebilecek diğer gelen istekleri işlemek için kullanılabilir diğer yola. (Bu uygulamanın birçok farklı gelen istekleri alacağını farz ettiğimden) – JLTChiu
Bu, sizin düşündüğünüz anlamına gelmez. Ve Gunicorn * bunu sizin için halletmeli, sadece bir "time.sleep (30)" ekleyerek emin olmak için test edebilirsiniz, sanırım. Reaktör kalıbı denir, ancak Gunicorn müşterinin bağlanmasına izin verir ve ardından talebi bir işçiye aktarır. İşçi bittiğinde, çalışandan veriyi döndürür ve sonra tekrar havuza geri koyar. Yine de, eğer mevcut olanlar meşgulse, yeni bir işçiyi çalıştırırsa emin değilim. –