python網路程式設計之單執行緒之間的併發

2022-04-03 00:09:09 字數 1844 閱讀 1611

單執行緒之間的併發就是利用乙個執行緒實現併發的效果,也就是利用了cup遇到阻塞的那段時間去做別的事情,從而提高了cup的利用率,使之在單個執行緒中就實現了併發的效果。

下面就是乙個簡單的服務端單個執行緒實現併發的**:

from socket import *server=socket(af_inet,sock_stream)  

server.setsockopt(sol_socket,so_reuseaddr,1)#

位址重用

server.bind(('

127.0.0.1

',8082)) #

繫結埠

server.listen(5)#

監聽server.setblocking(false)#

關閉io阻塞

print('

starting......')

conn_l=

del_l=

while

true:

try:

conn,addr=server.accept()#

建立連線

print('

%s 已連線

'%addr[0])

except blockingioerror:#

捕捉io阻塞異常

for conn in

conn_l:

try:

data=conn.recv(1024)#

接受資料

conn.send(data.upper())

except

blockingioerror:

pass

except connectionreseterror:#

捕捉主機強行斷開異常

存到列表準備刪除斷開的連線

for obj in

del_l:

obj.close()

#關閉連線

conn_l.remove(obj) #

刪除連線

del_l= #

清空

很明顯,這種方式太麻煩,要自己捕獲異常的訊號去進行相應的處理。

這個時候就應該想到python模組了,沒錯selete這個模組就可以做這些捕捉資訊的功能。

下面就用selete模組來寫上面那些**吧:

from socket import *

import

select

server=socket(af_inet,sock_stream)

server.setsockopt(sol_socket,so_reuseaddr,1)

server.bind((

'127.0.0.1

',8082))

server.listen(5)

server.setblocking(false)

print('

starting......')

read_l=[server,]

while

true:

s,_,_=select.select(read_l,,)

for obj in

s :

if obj ==server:

conn, addr =obj.accept()

else

:

try:

data=obj.recv(1024)

obj.send(data.upper())

except

connectionreseterror:

pass

很明顯,要比上面**精簡好多,這就是python模組的好處了,哈哈 ....  

PHP高階程式設計之 單執行緒實現並行抓取網頁

鑽研php很多年,想總結一下自己,但是不知從何說起,那就先談一些我知道的php的用法,這些用法很多有多年的工作經驗的人可能都不知道。實際中可能用不到,但是用到了,就是體現你實力的時候。現在問題是這樣的,乙個使用者,用的是windows 的虛擬伺服器,然後呢,當開啟乙個頁面的時候,要並行的抓取大概10...

python單執行緒網路爬蟲

源程式 以網為例 coding utf8 importrequests importre importsys reload sys sys.setdefaultencoding gb18030 type sys.getfilesystemencoding html requests.get html...

python網路程式設計之執行緒佇列 queue

首先來看乙個示例 import threading import time li 1,2,3,4,5 defpri while li a li 1 print a time.sleep 1 try li.remove a except exception as e print a,e t1 thre...