有4個ftp 服務器,每個服務器只允許5臺設備登錄,現在有50臺設備要從服務器上下載檔案
目前問題:
1)選擇ftp服務器一段代碼可以優化嗎
2)如何在累計連接達到20的時候,讓回圈停止,等待20個設備完成,如果有一個設備完成,讓累計數清零,繼續連接ftp服務器,累計到20個設備,又再暫停,直到50個設備都下載完。(用queue?后面代碼不會寫)
devs = ['dev1', ......, 'dev50']
servers = ['ser1', 'ser2', 'ser3', 'ser4']
connect_count = 0
for dev in des:
# 根據目前累計數字選擇對應的服務器
if connect_count <= 5:
ftp_ser = servers[0]
elseif connect_count > 5 and connect_count <= 10:
ftp_ser = servers[1]
elseif connect_count > 10 and connect_count <= 15:
ftp_ser = servers[2]
elseif connect_count > 15 and connect_count <= 20:
ftp_ser = servers[3]
# 假設設備成功連接ftp服務器
connect_count += 1
uj5u.com熱心網友回復:
百度后自己領悟原理是:開啟20個thread,每一個thread會從queue中取走一個引數然后做相應的操作,運作一遍后,檢查queue中還有沒有引數,有的話繼續操作,沒有的話就退出thread。
簡單點就是:queue里面坐滿了顧客,我同時開了20個柜臺(threading)來處理顧客需求,1個柜臺處理完一個顧客后,假如還有顧客在等待就繼續處理,沒有的話就關閉柜臺,直到全部的顧客都處理完畢。
import queue
import threading, time
def rest(que):
while not que.empty():
q_name = que.get()
print(q_name+' > sleep 20 seconds.')
time.sleep(20)
print(q_name+' > wake up.')
q = queue.Queue()
for i in range(1,31):
q.put('dev %d' % i)
max_thread = 20
ts = []
for i in range(max_thread):
t = threading.Thread(target=rest, args=(q,))
t.start()
ts.append(t)
for t in ts:
t.join()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/18204.html
