2015-04-17 21 views
7

İki işlemim var; Bir ana süreç ve bir alt süreç. Ana işlem bir asyncio olay döngüsünü çalıştırıyor ve alt işlemi başlatıyor. Alt süreçte başka bir asyncio olay döngüsü başlatmak istiyorum. Alt işlemi başlatmak için aioprocessing modülünü kullanıyorum.Python işlem başına Asyncio olay döngüsü (aioprocessing, çoklu olay döngüleri)

def subprocess_code(): 
    loop = asyncio.get_event_loop() 
    @asyncio.coroutine 
    def f(): 
     for i in range(10): 
      print(i) 
      yield from asyncio.sleep(1) 
    loop.run_until_complete(f()) 

Ama bir hata alıyorum:

altişlem fonksiyonudur

loop.run_until_complete(f()) 
    File "/usr/lib/python3.4/asyncio/base_events.py", line 271, in run_until_complete 
    self.run_forever() 
    File "/usr/lib/python3.4/asyncio/base_events.py", line 239, in run_forever 
    raise RuntimeError('Event loop is running.') 
RuntimeError: Event loop is running. 

yeni bir başlangıç ​​veya alt süreç olarak varolan, asyncio olay döngü yeniden mümkün mü ? Öyleyse nasıl?

+0

nasıl altişlem başlatıldığında asyncio olay döngü ile işlemi başlatılan? – tdelaney

+0

process = aioprocessing.AioProcess (hedef = hedef) process.start() – solarw

+2

Sanırım "aioprocessing" bizim kendi @dano tarafından yazılmıştır. Dikkatini çekmek için başlığı ekleyebilirsin. – tdelaney

cevap

15

Rahatsız ettiğim için özür dilerim! Bir çözüm buldum!

policy = asyncio.get_event_loop_policy() 
policy.set_event_loop(policy.new_event_loop()) 
loop = asyncio.get_event_loop() 

koymak alt sürecin içinde yeni asycnio olay döngü başlatmak için bu kod

+3

Üzgün ​​olmaya gerek yok! Gelecek ziyaretçilere yardımcı olabileceğinden [http://stackoverflow.com/help/self-answer], kendi sorularınızın yanıtlarını bekliyor. –

+0

Bu ilginç. “aproprocessing”, “multiprocessing” den geçer ve bu, çocuğun ana bellek alanına sahip olduğu anlamına gelir (en azından linux). Yani, yeniden başlatılması gereken aktif olmayan bir olay döngüsü var. – tdelaney

+0

Asyncio'nun iş parçacığı döngülerinde çalıştığını gördüm, bu nedenle yeni iş parçasındaki yeni döngü soru sorulmadan başlatılmalıdır. Bir tür atfork işleyicisinin, devre dışı bırakılmış etkinlik döngüsünü otomatik olarak kaldırması gerektiğini, ilkeyle hile yapmadan yeni döngüyü başlatmaya yardımcı olmak için – solarw

İlgili konular