0

NATS (nats.io メッセージング システム) にデータを送信するために、コルーチンを使用しようとしています。

このコードを引数なしで for ループで呼び出そうとすると、完全に機能します。

しかし、引数を追加すると、yield nc.connect 関数は何も返さず、メイン関数に進みます。

引数を指定してコルーチンを呼び出すにはどうすればよいですか?

@tornado.gen.coroutine
def process_events_list(events):  
    try: 
        nc = NATS()
        parser = SafeConfigParser()
        conf = os.path.realpath(
        os.path.join(os.getcwd(),'ev_nats\\ev_nats.ini'))
        parser.read(conf)
        endpoints = ast.literal_eval(parser.get('Nats', 'Servers'))
        subject = parser.get('Nats', 'Subject')
        opts = {"servers": endpoints}
        **yield nc.connect(**opts)**  # wont connect return to main        
        for ev in events:
            yield nc.publish(subject, ev)
        yield nc.flush()
        log("Published")
    except Exception, e:
        log(e)

if __name__=='__main__': # if run directly, not called by event_dispatcher.py
   evt = ['1','2','3']
   tornado.ioloop.IOLoop.instance().run_sync(lambda : process_events_list(evt))
4

1 に答える 1