python 程式設計之twisted詳解及簡單例項

2022-10-04 21:27:34 字數 2068 閱讀 7492

python 程式設計之twisted詳解

前言:我不擅長寫socket**。一是用c寫起來比較麻煩,二是自己平時也沒有這方面的需求。等到自己真正想了解的時候,才發現自己在這方面確實有需要改進的地方。最近由於專案的原因需要寫一些python**,才發現在python下面開發socket是一件多麼爽的事情。

對於大多數socket來說,使用者其實只要關注三個事件就可以了。這分別是建立、刪除、和收發資料。python中的twisted庫正好可以幫助我們完成這麼乙個目標,實用起來也不麻煩。下面的**來自twistedmatrix**,我覺得挺不錯的,貼在這裡和大家分享一下。如果需要測試的話,直接telnet localhost 8123就可以了。如果需要在twisted中處理訊號,可以先註冊signal函式,在signal函式中呼叫reactor.stop(),後面twisted繼續call stop_factory,這樣就可以繼續完成剩下的清理工作了。

from twisted.internet.protocol import factory

from twisted.protocols.basic import linereceiver

from twisted.internet import reactor

class chat(linereceiver):

def __init__(self, users):

self.users = users

self.name = none

self.state = "getname"

def connectionmade(self):

self.sendline("what's your name?www.cppcns.com")

def connectionlost(self, reason):

if self.namewww.cppcns.com in self.users:

del self.users[self.name]

def linereceived(self, line):

if self.state == "getname":

self.handle_getname(line)

else:

self.handle_chat(line)

def handle_getname(self, name):

if name in self.users:

self.sendline("name taken, please choose another.")

return

self.sendline("welcome, %s!" % (name,))

self.name = name

self.users[name] = self

self.state = "chat"

def handle_chat(self, message):

message = " %s" % (self.name, message)

for name, protocol in self.users.iteritems():

if protocol != self:

protocol.sendline(message)

class chatfactory(factory):

def __init__(self):

self.users = {} # maps user names to chat instances

def buildprotocol(self, addr):

ret程式設計客棧urn chat(self.users)

def startfactory(self):

print 'start程式設計客棧'

def stopfactory(self):

print 'stop'

reactor.listentcp(8123, chatfactory())

reactor.run()

本文標題: python 程式設計之twisted詳解及簡單例項

本文位址: /jiaoben/python/178030.html

python程式設計之美

許久沒有用python,好多都忘得差不多了,以至於面試 趕緊複習,求下次輕虐。1 cmp list1,list2 比較兩個列表的元素 2 len list 列表元素個數 3 max list 返回列表元素最大值 4 min list 返回列表元素最小值 5 list seq 將元組轉換為列表 2 l...

python程式設計之NMS

非極大值抑制 nms nms的演算法步驟如下 input 所有 出的bounding box bbx 資訊 座標和置信度confidence iou閾值 大於該閾值的bbx將被移除 for object in all objects 1 獲取當前目標類別下所有bbx的資訊 2 將bbx按照confi...

python程式設計之 模擬時鐘

運用畫圓,畫線的方法,以及一些數學知識做的乙個demo。對教材裡的例子裡的畫時針的部分修改了下。需要注意的是遠點選擇在 而數字時鐘的十二點位於遠點的正上方。所以如果用三角函式來計算時針分針秒針的位置的時候需要對角度進行旋轉。根據sin,cos函式的特點,將對應的角度 90 讀得到的是所需要的結果。比...