2013-08-30 23 views
10

Flask mikro çerçevesini kullanarak çok iş parçacıklı bir web sunucusu uygulamıştım. Temel olarak, sunucumun bir görev sırası ve bir iş parçacığı havuzu var. Bu nedenle, birden çok istekleri işleyebilir. Flask Python'da uygulandığından ve Python iş parçacıkları gerçekten eşzamanlı olmadığından web uygulamam biraz gecikmeli.Gerçek çok iş parçacığı elde etmek için flask alternatifleri?

Çok iş parçacığı sorununun üstesinden gelmek için Flask'a alternatifler var mı?

+1

Flask'ı hangi yolla dağıtıyorsunuz? Flask'ın kendisi üzerinde çok fazla olmayacaktı. –

+1

Python'daki çoklu iş parçacığının, yapmaya çalıştığınız şeylere çok uygun olabileceğini unutmayın. Görünümünüzün "laggy" bölümleri, web hizmeti veya veritabanı çağrıları veya her istek için bir Python işlemi oluşturan düzgün olmayan bir web sunucusu gibi şeyler olabilir. Asıl sorun ne olursa olsun, verdiğiniz bilgilerle çözmenize yardımcı olmanın ne olduğunu bilmiyoruz. Dahası, Flask'a bir alternatif sormak temelde bir araç için bir tavsiyeyi sormaktır. Bu, StackOverflow'un çoklu olası cevaplar nedeniyle ele alınması için tasarlandığı bir soru değildir. –

+0

Belirtildiği gibi, istek başına bir süreç oluşturuyorum. Ancak bundan kaçınamıyorum çünkü web hizmeti, ayrı bir ikili olarak uygulanan bir metin-konuşma (TTS) sistemini açığa çıkarıyor. TTS süreciyle etkileşim kurmak için pexpect modülü kullanıyorum. Bu nedenle, istek başına, iş parçacığı havuzundan mevcut boş bir iş parçacığı, pexpect kullanarak TTS işlemini oluşturacaktır. Tasarımın biraz tuhaf olduğunu biliyorum. İşte şimdiki uygulamaya link http://sitspeech.iitkgp.ac.in/. Mevcut tasarımı geliştirmek için herhangi bir öneriniz için teşekkür ederiz. – user2586432

cevap

7

Bu, Flask'ın hatası değil, Python yorumlayıcısında bir sınırlamadır, dolayısıyla kullandığınız tüm çerçeve buna tabi olacaktır.

Ancak bu sorunu önlemek için harika bir yol var. Gerçek bir mutabakata sahip olmak için, iş parçacığı yerine bir işlem havuzu kullanabilirsiniz. multiprocessing modülü, iş parçacığı modülüyle uyumlu bir API sağlar, ancak çalışanlar için alt süreçler oluşturur. Flask uygulamaları için arka plan çalışanları oluşturmak için bu modülü kullandım ve çok iyi çalıştığını gördüm.

22

Bu soruya rastladım ve küçük bir hayal kırıklığına uğradım kimsenin şişeyi nasıl işaret ettiğine dikkat etmedim (ve çoğu python web uygulamasının , dağıtılmak üzere anlamına geliyordu). Bkz: http://flask.pocoo.org/docs/deploying/#deployment

Benim tercih dağıtım seçenektir süper basit Tornado Linux ve Windows (eşit derecede iyi çalışır ben mevcut web siteleri ile birlikte onu dağıtmayı veya mevcut bir sitenin parçası olarak bile bir melez dağıtım ediyorsam, ben genellikle IIS Uygulama İsteği Yönlendirmesini [ARR] Tornado'ya Ters Proxy olarak kullanır). Her ikisinde de büyük başarılar elde ettim.

Tornado, FriendFeed'i çalıştıran ölçeklenebilir, engellenmeyen web sunucusunun ve araçlarının açık kaynaklı bir sürümüdür. Bloke edilmediği ve epoll kullandığı için, binlerce eşzamanlı duran bağlantıyı işleyebilir, bu da gerçek zamanlı web servisleri için idealdir. Flask ile bu hizmeti entegre basittir: sizin şişe uygulama yourapplication.py ise

Yani, şöyle uygulamanızı hizmet etmek başka denilen tornado_web.py oluşturmak ve kullanmak olabilir:

from tornado.wsgi import WSGIContainer 
from tornado.httpserver import HTTPServer 
from tornado.ioloop import IOLoop 
from yourapplication import app 

http_server = HTTPServer(WSGIContainer(app)) 
http_server.listen(5000) 
IOLoop.instance().start() 

yoluyla: http://flask.pocoo.org/docs/deploying/wsgi-standalone/#tornado

+0

Yeni yükledim benim app kasırga (ileriye doğru söyleyin), ama imkansız konsolda göreceli çağrıları ile balon varsayılan sunucusunun yararlı günlükleri eksik - bu kasırgada nasıl yapılabilir biliyor musunuz? @Aaoron –