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

2021-08-25 08:59:25 字數 1625 閱讀 7565

首先來看乙個示例:

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 = threading.thread(target=pri)

t1.start()

t2 = threading.thread(target=pri)

t2.start()

執行結果:

5 5

4 —— 5 list.remove(x): x not in list

4 3

—— 4 list.remove(x): x not in list

3 2

—— 3 list.remove(x): x not in list

2 1

—— 2 list.remove(x): x not in list

1 —— 1 list.remove(x): x not in list

上面的示例說明了乙個問題,在多執行緒中列表是不安全的,當然解決這個問題也可以通過加鎖來實現,但如果不用鎖,該怎麼辦呢?這時候就用到了佇列的概念。

多執行緒佇列:

import queue  #執行緒佇列

l =

q = queue.queue(3)# fifo

q.put(11)

q.put('hello')

q.put()

q.put(34)

while

1: data = q.get()

print(data)

執行結果:

11 hello

佇列有三種形式,預設是先進先出,就像上面一樣。

佇列(先進後出):

#先進後出lifo

import queue

q = queue.lifoqueue()

q.put(11)

q.put('hello')

q.put()

q.put(34)

while

1: data = q.get()

print(data)

執行結果:

34

hello

11佇列(優先順序):

#優先順序

import queue

q = queue.priorityqueue()

q.put([3,11])

q.put([2,'hello'])

q.put([4,])

while

1: data = q.get()

print(data)

執行結果:

[2, 『hello』]

[3, 11]

[4, ]

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

python3.5中,佇列是執行緒間最常用的交換資料的形式。queue模組是提供佇列操作的模組,雖然簡單易用,但是不小心的話,還是會出現一些意外。import queue q queue.queue maxsize 10 queue.queue類即是乙個佇列的同步實現。佇列長度可為無限或者有限。可通...

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

單執行緒之間的併發就是利用乙個執行緒實現併發的效果,也就是利用了cup遇到阻塞的那段時間去做別的事情,從而提高了cup的利用率,使之在單個執行緒中就實現了併發的效果。下面就是乙個簡單的服務端單個執行緒實現併發的 from socket import server socket af inet,soc...

Python網路程式設計之UDP

udp處理資料報,是一種無連線的協議 伺服器端 server socket.socket socket.af inet,socket.sock dgram 繫結ip server.bind 192.168.1.104 221 while true 接收 data,address server.rec...