Ben şu komutla geliştiriyorum Django uygulaması ile Gunicorn içinde gaiohttp işçisi kullanmaya çalışıyorum:Asyncio ile gunicorn kullanırken başka bir isteği nasıl sağlayabilirim?
gunicorn -k gaiohttp -b localhost:8080 myproject.wsgi
Benim nihai hedefi eşzamanlı istekleri işlemeye muktedir olduğunu - yani var 1 gunicorn işçisi eşzamanlı olarak çoklu istekleri işlemek. Bu istekleri yavaşlatan G/Ç bağlı işlemleri vardır.
Ben isteği işlerken olduğumda bir olay döngü zaten çalışıyor biliyorum:class MyView(View):
def get(self, request):
loop = asyncio.get_event_loop()
loop.is_running() # True
...
Sorular:
nasıl böyle benim bakış kodu içinde
yield from asyncio.sleep(10)
gibi bir işlemi gerçekleştirebilir?class MyView(View): def get(self, request): # Raises AssertionError: yield from wasn't used with future yield from asyncio.sleep(10)
-
@asyncio.coroutine def simulate_work(): yield from asyncio.sleep(10) class MyView(View): def get(self, request): # This runs simulate_work(), however, it doesn't block # the response is returned before simulate_work() is finished loop = asyncio.get_event_loop() task = loop.create_task(simulate_work())
Ben geleceği kullanmayı deneyin isteği işlenirken Ancak onlar blok yok, olay döngü görevleri ekleyebilir, ancak olay döngü zaten
çalışıyor@asyncio.coroutine def simulate_work(future): yield from asyncio.sleep(10) future.set_result('Done!') class MyView(View): def get(self, request): future = asyncio.Future() asyncio.async(simulate_work(future)) loop = asyncio.get_event_loop() # Raises RuntimeError: Event loop is running. loop.run_until_complete(future) print(future.result())
Açıkça ben asyncio veya gaiohttp hakkında anlayamıyorum şey var.
Geçerli istekler için asyncio.sleep(10)
bloğunu nasıl alabilirim, ancak diğer isteklerin işlenmesini engellemeyin?
Diğer gunicorn kullanıcıları Andrew ile aynı şeyden bahsetti - bkz. Http://lists.gunicorn.org/user/74434.html - Ne yazık ki vazgeçtim ve bunun yerine Tornado çerçevesini kullanmaya başladım. –