こんにちは、私はコードのこの部分を持っています:
self.lock_tables("write", ['confcommands'])
self.db.execute("INSERT INTO confcommands (network_id, ntype, timestamp, command) \
VALUES (%s,%s,%s,%s)", nid, mynet_type, ts, cmdjson)
self.unlock_tables();
time.sleep(5)
como_url = "".join(['http://', options.como_address, ':', options.como_port,
'/ztc_config?netid=0&opcode_group=0&opcode=0&start=-20s&end=-1s'])
http_client = AsyncHTTPClient()
#response = yield tornado.gen.Task(http_client.fetch, como_url)
request = tornado.httpclient.HTTPRequest(url=como_url, connect_timeout=5.0, request_timeout=5.0)
print request.request_timeout
response = yield tornado.gen.Task(http_client.fetch, request)
print response
センサーに送信するコマンドを DB に書き込みます。次に、センサーの応答を読み取るために、別の DB に http 要求を行います。センサーによるコマンドの読み取りと、精緻化によるその応答の間には時間があります。
非同期デコレータとyield gen.Taskを使用すると、サーバーが待機しているかのような応答が得られると思いました。しかし代わりに、コードに time.sleep を入れてプログラムを停止し、応答を待つ必要があります。
代わりに、http リクエストがループで実行されている場合のように行う方法があります... リクエストが応答を待ってから停止してプログラムを続行する場合のように。
紛らわしくてすみません。しかし、私がその問題を説明するのは難しいです。