2017-10-10 95 views
7

Jupyter dizüstü bilgisayarıyla uyumlu olan python için eşzamansız, dağıtılmış hesaplama motoru kullanmaya çalışıyorum. Sistemin 'itme bildirimi' yaklaşımına dayandırması gereken şey (neredeyse, umarım) kullanıcının belirli bir hesaplama sonucunu beklemesine izin vermesi imkansızdır (yani, beklenen sonuç iletilen mesaj verilene kadar verilen dizüstü bilgisayar hücresinin blok yürütülmesi). Daha net olmak gerekirse, ben çalışıyorum:Belirli bir ileti alınana kadar jupyter defter hücresinin çalışmasını engelleyin

  1. dizüstü olay döngü jupyter yeni görev ekle (döngü sırasında belirli msj geldi ise görev periyodik kontrol ediyor, sonları msg geldi)
  2. Blok geçerli hücre görev tamamlanmasını bekliyorum. https://github.com/SLEEP-MAN/RabbitMQ_jupyterNotebook_asyncio

    herhangi bir fikir: Ben hazırlıklı dizüstü sorunumu sunmak var

  • Hala (hafifçe http://pika.readthedocs.io/en/0.10.0/examples/asynchronous_consumer_example.html kodunu modifiye RabbitMQ, Pika kullanarak,) gelen iletileri işlemek mümkün? Mümkün mü (belki de bazı IPython/IpyKernel magic;>?) Veya yaklaşımımı 180 derece değiştirmem gerekiyor mu?

  • +0

    Eklendi bir test cevap çalışır bir göz atın –

    cevap

    0

    Sorununuz, iki farklı döngüyü bir arada karıştırmanızdır. Bu yüzden işe yaramadı. Birkaç değişiklik yapmalısın.

    Kullanım AsyncioConnection yerine TornadoConnection

    return adapters.AsyncioConnection(pika.URLParameters(self._url), 
                 self.on_connection_open) 
    

    Sonraki size döngü zaten bağlantı başlayan Çünkü

    self._connection.ioloop.start() #throws exception but not a problem... 
    

    hattı

    altına kaldırmak gerekir. Sonra

    loop = asyncio.get_event_loop() 
    loop.run_until_complete(wait_for_eval()) 
    

    bekleyen için aşağıdaki kodu kullanabilirsiniz ihtiyaç Ve şimdi

    AsyncIO waiting