網路程式設計的各種模組

2022-06-20 17:03:11 字數 3796 閱讀 6704

各種模組:

from gevent import monkey;monkey.patch_all()

import time

from gevent import spawn

import select

from multiprocessing import process,semaphore,rlock,event,joinablequeue

from threading import thread,semaphore,event,rlock

import queue

from concurrent.futures import processpoolexecutor,threadpoolexecutor

pool1 = processpoolexecutor()

pool2 = threadpoolexecutor()

a = queue.queue()

b = queue.lifoqueue()

c = queue.priorityqueue()

d = joinablequeue()

x = semaphore(5)

e = event()

def task(tt):

print(tt) # tt 普通引數

x.acquire()

# print(1)

# time.sleep(2)

x.release()

# e.set()

return 'ok'

# typeerror: task1() takes 0 positional arguments but 1 was given

def task1(t):

print(t) # print(t.result()) # ok 返回的是提交程序,的結果;也就是說 add_done_callback 裡的方法名,預設第乙個引數是future 物件,,,

# 即task這個任務提交之後的返回的物件。也就是說,這個add_done_callback是個物件方法。self。。。

# e.wait()

print('wl')

if __name__ == '__main__':

# for i in range(20):

# t1 = thread(target=task)

# t1.start()

# t2 = thread(target=task1)

# t2.start()

for i in range(20):

pool2.submit(task,i).add_done_callback(task1) # submit 提交

if i == 10:

pool2.shutdown() # runtimeerror: cannot schedule new futures after shutdown 關閉執行緒池,迴圈並沒有結束,會再次提交任務,所以,要break

break

"""非同步提交

gevent模組本身無法檢測常見的一些io操作

在使用的時候需要你額外的匯入一句話

from gevent import monkey

monkey.patch_all()

又由於上面的兩句話在使用gevent模組的時候是肯定要匯入的

所以還支援簡寫

from gevent import monkey;monkey.patch_all()

"""# def heng():

# print('哼')

# time.sleep(2)

# print('哼')##

# def ha():

# print('哈')

# time.sleep(3)

# print('哈')

## def heiheihei():

# print('heiheihei')

# time.sleep(5)

# print('heiheihei')##

# start_time = time.time()

# g1 = spawn(heng).join()

# g2 = spawn(ha)

# g3 = spawn(heiheihei)

# # g1.join()

# # g2.join() # 等待被檢測的任務執行完畢 再往後繼續執行

# # g3.join()

# # heng()

# # ha()

# # print(time.time() - start_time) # 5.005702018737793

# print(time.time() - start_time) # 3.004199981689453 5.005439043045044

多路復用io:

"""

當監管的物件只有乙個的時候 其實io多路復用連阻塞io都比比不上!!!

但是io多路復用可以一次性監管很多個物件

server = socket.socket()

conn,addr = server.accept()

監管機制是作業系統本身就有的 如果你想要用該監管機制(select)

需要你匯入對應的select模組

"""import socket

import select

server = socket.socket()

server.bind(('127.0.0.1',8080))

server.listen(5)

server.setblocking(false)

read_list = [server]

while true:

r_list, w_list, x_list = select.select(read_list, , )

"""幫你監管

一旦有人來了 立刻給你返回對應的監管物件

一開始只監管server,當有客戶端連線,被監管的server,有了回應,所以返回的r_list中有server

新增連線物件到read_list,增加了乙個監管的物件。當連線物件,有傳送資料,那麼,檢測到了結果,返回的r_list,就有了連線物件。

也就是說被監管的物件,哪個有結果回應,就新增到r_list中,從而程式往下執行。

當連線斷開時,也是一種結果,收到的資訊為空。

"""# print(res) # (, , )

# print(server)

# print(r_list)

print(read_list)

print(r_list,w_list,x_list) # r_list 一開始只有server,有了連線物件之後,只有連線物件。

for i in r_list: #

"""針對不同的物件做不同的處理"""

if i is server:

conn, addr = i.accept()

# 也應該新增到監管的佇列中

print('111111111')

else:

res = i.recv(1024)

if len(res) == 0:

i.close()

# 將無效的監管物件 移除

read_list.remove(i)

print(res) # b''

continue

print(res)

i.send(b'heiheiheiheihei')

網路程式設計之各種協議

在網路程式設計 時有各種協議,多的眼花繚亂,學著也容易混淆,特意整理一下,方便查閱 arp 位址解析協議,就是把ip位址和mac位址對應起來的,當網路中乙個ip位址沒有與之相對應的mac位址時,arp可以在網路中找到與之相對應的主機mac位址。ip在osi模型的網路層,mac在資料鏈路層,他倆彼此互...

使用requests模組的網路程式設計

python操作網路,也就是開啟乙個 或者請求乙個http介面,本篇是介紹使用request模組的使用方式。在使用requests模組之前需要先安裝,在cmd中輸入 pip install requests 即可。以下是各種介面的訪問操作 1 發get請求 1 url 介面的url 2 data 請...

Python socket模組實現網路程式設計

osi七層結構 應用表示 會話傳輸 傳輸層一tcp udp 網路 ip位址 資料鏈路 mac位址 物理層傳輸方式 tcp ip 安全的傳輸 udp 不安全傳輸 socket流程圖 socket是在應用層和傳輸層之間的乙個抽象層,它把tcp ip層複雜的操作抽象為幾個簡單的介面 用層呼叫已實現程序在網...