成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

【tulip】 - I/O阻塞的小例子

JessYanCoding / 2818人閱讀

摘要:在了解了的實(shí)現(xiàn)方式的基礎(chǔ)之上,希望能夠把流程阻塞的功能在的框架之上實(shí)現(xiàn),從而可以制作一個(gè)簡(jiǎn)單的類似,這樣的集群調(diào)度工具。我們先來(lái)看一個(gè)最基本的網(wǎng)絡(luò)編程的例子這是一個(gè)服務(wù)器。

接下來(lái),會(huì)把Python tulip這個(gè)網(wǎng)絡(luò)庫(kù)(也就是3.4之后的asyncio)如何實(shí)現(xiàn)的進(jìn)行一些分析。在了解了tulip的實(shí)現(xiàn)方式的基礎(chǔ)之上,希望能夠把流程阻塞的功能在tulip的框架之上實(shí)現(xiàn),從而可以制作一個(gè)簡(jiǎn)單的類似ansible,saltstack這樣的集群調(diào)度工具。
我們先來(lái)看一個(gè)最基本的網(wǎng)絡(luò)編程的例子

import socket

listen_sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM, proto=socket.IPPROTO_IP)
listen_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_sock.bind(("0.0.0.0", 9090))
listen_sock.listen(0)
while True:
    conn_sock, client_addr = listen_sock.accept()
    print("connected from %s:%s" % client_addr)
    input = conn_sock.recv(8192)
    while "done" != input.strip():
        conn_sock.sendall(input)
        input = conn_sock.recv(8192)
    conn_sock.sendall("bye!
")
    conn_sock.close()

這是一個(gè)tcp服務(wù)器。客戶端連上了之后向其發(fā)送的字符會(huì)被原樣返回回來(lái)(所謂echo),除非發(fā)送的是done這個(gè)字符串。收到了done之后連接斷開這個(gè)客戶端的連接。

$ telnet 127.0.0.1 9090
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is "^]".
I say hello
I say hello
done
bye!

這個(gè)例子沒(méi)有使用多線程,也沒(méi)有使用其他任何支持并發(fā)的技術(shù)。所以一次也就只能有一個(gè)客戶端連到服務(wù)器進(jìn)行通信,第二個(gè)客戶端連上來(lái)之后得等一個(gè)客戶端退出之后才會(huì)被服務(wù)器服務(wù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/45306.html

相關(guān)文章

  • tulip】 - IOCP

    摘要:簡(jiǎn)單來(lái)說(shuō)就是一個(gè)操作系統(tǒng)提供的回調(diào)機(jī)制。其中這一步是創(chuàng)建,是做一個(gè)調(diào)用,后面的是輪詢,這一步是根據(jù)返回的查找對(duì)應(yīng)的回調(diào)函數(shù)回調(diào)。這樣狀態(tài)從多個(gè)線程的多個(gè)棧上,變成了只有一個(gè)線程,但是在線程內(nèi)部有一個(gè)來(lái)維護(hù)單線程內(nèi)多個(gè)并發(fā)流程的狀態(tài)。 為了讓I/O阻塞的時(shí)候,程序還可以去干別的。除了使用線程模型,讓操作系統(tǒng)的內(nèi)核去調(diào)度多個(gè)線程,Windows提供了IOCP機(jī)制。簡(jiǎn)單來(lái)說(shuō)就是一個(gè)操作系統(tǒng)提...

    Sunxb 評(píng)論0 收藏0
  • tulip】 - 多線程的版本

    摘要:最重要的是每個(gè)線程,對(duì)應(yīng)了一個(gè)函數(shù)的執(zhí)行。有多個(gè)線程同時(shí)執(zhí)行的時(shí)候,每個(gè)線程的狀態(tài)是由操作系統(tǒng)內(nèi)核負(fù)責(zé)保存在內(nèi)存中的。在多線程的實(shí)現(xiàn)中。并且內(nèi)核的線程在切換多個(gè)線程的時(shí)候,線程切換的開銷是比較大。 上次的網(wǎng)絡(luò)編程的例子,改寫成多線程的是這樣: import socket import thread def main(): listen_sock = socket.socke...

    CoderStudy 評(píng)論0 收藏0
  • tulip】 - 多進(jìn)程的版本

    摘要:前面的網(wǎng)絡(luò)編程的例子使用多進(jìn)程也是可以實(shí)現(xiàn)的其中之后會(huì)創(chuàng)建一個(gè)子進(jìn)程。從效率上來(lái)說(shuō),具有多線程一樣的問(wèn)題,而且內(nèi)存占用會(huì)更高,切換成本也更高。多線程和多進(jìn)程的版本從代碼可讀性上來(lái)說(shuō)還是非常不錯(cuò)的,很好懂,從上至下平鋪直敘的。 前面的網(wǎng)絡(luò)編程的例子使用多進(jìn)程也是可以實(shí)現(xiàn)的: import socket import os def main(): listen_sock = s...

    ACb0y 評(píng)論0 收藏0
  • python并發(fā)2:使用asyncio處理并發(fā)

    摘要:是之后引入的標(biāo)準(zhǔn)庫(kù)的,這個(gè)包使用事件循環(huán)驅(qū)動(dòng)的協(xié)程實(shí)現(xiàn)并發(fā)。沒(méi)有能從外部終止線程,因?yàn)榫€程隨時(shí)可能被中斷。上一篇并發(fā)使用處理并發(fā)我們介紹過(guò)的,在中,只是調(diào)度執(zhí)行某物的結(jié)果。 asyncio asyncio 是Python3.4 之后引入的標(biāo)準(zhǔn)庫(kù)的,這個(gè)包使用事件循環(huán)驅(qū)動(dòng)的協(xié)程實(shí)現(xiàn)并發(fā)。asyncio 包在引入標(biāo)準(zhǔn)庫(kù)之前代號(hào) Tulip(郁金香),所以在網(wǎng)上搜索資料時(shí),會(huì)經(jīng)??吹竭@種花的...

    wushuiyong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<