async def client(loop:IOLoop): try: print("try to connect {0:s}:{1:s}".format(args.host,args.port)) stream = await clientObj.connect(args.host,args.port) #type:tornado.concurrent.futures.Future stream.set_nodelay(True) async def handle(): while True: command=Q.get().split(' ') act=command[0] if act=='p': print(goodsTable) elif act=='s': good=goodsList[int(command[1])] RFID = bytes.fromhex(good[0]) msg =SSCEncoder.SSCFrameEncoder(RFID,CartID,op,opData) print("sengMessage:",binascii.b2a_hex(msg)) await stream.write(msg) elif act=='d': msg = command[1].encode() await stream.write(msg) def waitKey(): while True: Q.put_nowait(input('>')) loop.add_callback(handle) loop.run_in_executor(None,waitKey) except StreamClosedError : print("error connecting, try in 5 sec") await gen.sleep(5) loop.add_callback(functools.partial(client,loop))