国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

JessYanCoding / 2765人閱讀

摘要:在了解了的實現方式的基礎之上,希望能夠把流程阻塞的功能在的框架之上實現,從而可以制作一個簡單的類似,這樣的集群調度工具。我們先來看一個最基本的網絡編程的例子這是一個服務器。

接下來,會把Python tulip這個網絡庫(也就是3.4之后的asyncio)如何實現的進行一些分析。在了解了tulip的實現方式的基礎之上,希望能夠把流程阻塞的功能在tulip的框架之上實現,從而可以制作一個簡單的類似ansible,saltstack這樣的集群調度工具。
我們先來看一個最基本的網絡編程的例子

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()

這是一個tcp服務器??蛻舳诉B上了之后向其發送的字符會被原樣返回回來(所謂echo),除非發送的是done這個字符串。收到了done之后連接斷開這個客戶端的連接。

$ 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!

這個例子沒有使用多線程,也沒有使用其他任何支持并發的技術。所以一次也就只能有一個客戶端連到服務器進行通信,第二個客戶端連上來之后得等一個客戶端退出之后才會被服務器服務。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45306.html

相關文章

  • tulip】 - IOCP

    摘要:簡單來說就是一個操作系統提供的回調機制。其中這一步是創建,是做一個調用,后面的是輪詢,這一步是根據返回的查找對應的回調函數回調。這樣狀態從多個線程的多個棧上,變成了只有一個線程,但是在線程內部有一個來維護單線程內多個并發流程的狀態。 為了讓I/O阻塞的時候,程序還可以去干別的。除了使用線程模型,讓操作系統的內核去調度多個線程,Windows提供了IOCP機制。簡單來說就是一個操作系統提...

    Sunxb 評論0 收藏0
  • tulip】 - 多線程的版本

    摘要:最重要的是每個線程,對應了一個函數的執行。有多個線程同時執行的時候,每個線程的狀態是由操作系統內核負責保存在內存中的。在多線程的實現中。并且內核的線程在切換多個線程的時候,線程切換的開銷是比較大。 上次的網絡編程的例子,改寫成多線程的是這樣: import socket import thread def main(): listen_sock = socket.socke...

    CoderStudy 評論0 收藏0
  • tulip】 - 多進程的版本

    摘要:前面的網絡編程的例子使用多進程也是可以實現的其中之后會創建一個子進程。從效率上來說,具有多線程一樣的問題,而且內存占用會更高,切換成本也更高。多線程和多進程的版本從代碼可讀性上來說還是非常不錯的,很好懂,從上至下平鋪直敘的。 前面的網絡編程的例子使用多進程也是可以實現的: import socket import os def main(): listen_sock = s...

    ACb0y 評論0 收藏0
  • python并發2:使用asyncio處理并發

    摘要:是之后引入的標準庫的,這個包使用事件循環驅動的協程實現并發。沒有能從外部終止線程,因為線程隨時可能被中斷。上一篇并發使用處理并發我們介紹過的,在中,只是調度執行某物的結果。 asyncio asyncio 是Python3.4 之后引入的標準庫的,這個包使用事件循環驅動的協程實現并發。asyncio 包在引入標準庫之前代號 Tulip(郁金香),所以在網上搜索資料時,會經??吹竭@種花的...

    wushuiyong 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<