日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python: Socket网络编程,多线程处理小Demo

發(fā)布時(shí)間:2024/9/5 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python: Socket网络编程,多线程处理小Demo 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一個(gè)簡(jiǎn)單的例子,深入研究一下socket的多線程處理任務(wù)

?

Server端:

#!/usr/bin/env python #encoding:utf8 # # 注意:定義encoding時(shí)必須在第二行import socket import Queue import threading from time import sleephost = "127.0.0.1" port = 60283 timeWait = 3 #定義每個(gè)線程處理任務(wù)時(shí)需要的時(shí)間,模擬處理任務(wù) ThreadNum = 10 #定義創(chuàng)建的線程 cache = Queue.Queue(maxsize=1000) #定義一個(gè)隊(duì)列# 處理任務(wù)的類 class Server(threading.Thread):def __init__(self, cache, ThreadName):threading.Thread.__init__(self)self.name = ThreadNameself.cache = cachedef run(self):while True:if not cache.empty(): #判斷隊(duì)列是否為空conn, addr = cache.get()data = conn.recv(1024)conn.sendall('success')print 'cacheData: ' + data + '; ThreadName: ' + self.name + '; cacheSize: ' + str(self.cache.qsize())sleep(timeWait)for i in range(ThreadNum):s = Server(cache, str(i))s.setDaemon(True) #設(shè)置為守護(hù)模式,當(dāng)主線程退出時(shí),子線程立即退出 s.start()# 創(chuàng)建Socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 綁定socket s.bind((host, port)) # 設(shè)置系統(tǒng)最大等待隊(duì)列,當(dāng)連接過多時(shí),系統(tǒng)緩存中可以緩存多少連接,不宜設(shè)置過大,消耗內(nèi)存和cpu s.listen(5)while True:# 循環(huán)接受,當(dāng)接受到連接時(shí),把連接放入隊(duì)列中,由線程獲取后執(zhí)行conn, addr = s.accept()cache.put((conn, addr))conn.close()

?

Client端:

#!/usr/bin/env python # import socket from time import sleep from threading import Threadhost = "127.0.0.1" port = 60283 num = 100def sirec(s, n):s.sendall('sn:' + str(i))data = s.recv(1024)s.close()for i in range(1, 100):s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((host, port))t = Thread(target=sirec, args=(s, 1))#t.setDaemon(True) t.start()print 'run over'

?

關(guān)于隊(duì)列Queue的使用:

q.qsize() 返回隊(duì)列的大小 q.empty() 如果隊(duì)列為空,返回True,反之False q.full() 如果隊(duì)列滿了,返回True,反之False q.full 與 maxsize 大小對(duì)應(yīng) q.get([block[, timeout]]) 獲取隊(duì)列,timeout等待時(shí)間 q.get_nowait() 相當(dāng)q.get(False) 非阻塞 q.put(item) 寫入隊(duì)列,timeout等待時(shí)間 q.put_nowait(item) 相當(dāng)q.put(item, False) q.task_done() 在完成一項(xiàng)工作之后,q.task_done() 函數(shù)向任務(wù)已經(jīng)完成的隊(duì)列發(fā)送一個(gè)信號(hào) q.join() 實(shí)際上意味著等到隊(duì)列為空,再執(zhí)行別的操作

?

轉(zhuǎn)載于:https://www.cnblogs.com/djoker/p/8267547.html

總結(jié)

以上是生活随笔為你收集整理的Python: Socket网络编程,多线程处理小Demo的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。