亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術(shù)文章
文章詳情頁

python異步回調(diào)轉(zhuǎn)為同步并實現(xiàn)超時

瀏覽:99日期:2022-07-01 11:35:28

問題描述

場景:一個服務(wù)端A,一個客戶端B,存在一個socket連接?,F(xiàn)在寫的是客戶端B部分,服務(wù)端不可控。原來是 B先發(fā)送一個包,等待A返回指定內(nèi)容,B再發(fā)送下一個包

def do(): s.send(...) yield 1 s.send(...) yield 2# 接收到數(shù)據(jù)后的回調(diào)def callback(): global f next(f) f=do()next(f)

現(xiàn)在想實現(xiàn)一個timeout,并且實現(xiàn)阻塞。B發(fā)送數(shù)據(jù)后阻塞,直到A返回數(shù)據(jù)(或5秒內(nèi)未接受到來自A的返回raise一個錯誤),請教如何實現(xiàn)?

問題解答

回答1:

用 Tornado 的話,寫不了幾行代碼吧。

先作個簡單的 Server ,以方便演示:

# -*- coding: utf-8 -*-from tornado.ioloop import IOLoopfrom tornado.tcpserver import TCPServerfrom tornado import genclass Server(TCPServer): @gen.coroutine def handle_stream(self, stream, address):while 1: data = yield stream.read_until(’n’) if data.strip() == ’exit’:stream.close()break if data.strip() == ’5’:IOLoop.current().call_at(IOLoop.current().time() + 5, lambda: stream.write(’ok 5n’)) else:stream.write(’okn’)if __name__ == ’__main__’: Server().listen(8000) IOLoop.current().start()

然后,來實現(xiàn) Client ,基本邏輯是,超時就關(guān)閉連接,然后再重新建立連接:

# -*- coding: utf-8 -*-import functoolsfrom tornado.ioloop import IOLoopfrom tornado.tcpclient import TCPClientfrom tornado import gendef when_error(stream): print ’ERROR’ stream.close() main()@gen.coroutinedef main(): client = TCPClient() stream = yield client.connect(’localhost’, 8000) count = 0 IL = IOLoop.current() while 1:count += 1stream.write(str(count) + ’n’)print count, ’...’timer = IL.call_at(IL.time() + 4, functools.partial(when_error, stream))try: data = yield stream.read_until(’n’)except: breakIL.remove_timeout(timer)print datayield gen.Task(IL.add_timeout, IOLoop.current().time() + 1)if __name__ == ’__main__’: main() IOLoop.current().start()

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 欧美在线观看高清一二三区 | 精品欧美一区二区在线看片 | 成人五级毛片免费播放 | 呦女精品视频 | 特级欧美午夜aa毛片 | 中文字幕日韩三级 | 国产香蕉影视院 | 国产在线观看xxxx免费 | 国产激情久久久久影 | 日本三级精品 | 中文字幕欧美一区 | 国产高清一国产免费软件 | 亚洲精品男人天堂 | 国产精品毛片久久久久久久 | 亚洲国产cao | 久久亚洲欧洲日产国码 | 亚洲另类自拍 | 亚洲日本欧美综合在线一 | 1024国产欧美日韩精品 | 亚洲一区二区三区久久 | 日日摸日日碰夜夜爽久久 | 亚洲精品区一区二区三区四 | 韩国免费播放一级毛片 | 视频精品一区二区三区 | 国产99视频在线 | 一区二区三区在线 | 欧 | 美女扒开腿让男人桶尿口 | 99精品视频在线在线视频观看 | 99精品国产在热久久 | 91成年人免费视频 | 模特视频一二三区 | 亚洲欧美日本综合一区二区三区 | 毛片视频免费观看 | 亚洲一区中文字幕在线 | 久久欧美久久欧美精品 | 性做久久久久久久免费看 | 性欧美视频a毛片在线播放 性欧美一级 | 成人免费视频一区二区三区 | 91人人视频国产香蕉 | 黄频漫画| 亚洲综合国产一区在线 |