from threading import *
from time import ctime
import socket
import pickle
class data:
def __init__(self,kind=none,to=none,from=none,message=none):
self.kind=kind
self.to=to
self.from=from
self.message=message
class serve:
def __init__(self,host='localhost',port=5432):
self.s=socket.socket(socket.af_inet,socket.sock_stream)
self.s.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)
self.s.bind((host,port))
self.s.listen(1)
self.online=
self.data=
self.lock=lock()
while 1:
clientsock,clientaddr=self.s.accept()
client=thread(target=self.handleclient,args=[clientsock])
client.start()
def main():
serve=serve()
if __name__=='__main__':
main()
# coding: utf-8
from tkinter import *
from threading import *
import socket
import pickle
import time
#資料報類
class data:
def __init__(self,kind=none,to=none,from=none,message=none):
self.kind=kind
self.to=to
self.from=from
self.message=message
#請求新對話(新執行緒)
def ask_dialog(self):
name=self.entry.get()
dialog=thread(target=self.handledialog,args=[name])
dialog.start()
self.entry.delete(0,len(name))
#建立新對話
def handledialog(self,name):
top=toplevel()#介面和主介面基本一樣
top.title(name)
scrbar=scrollbar(frame[0])
scrbar.pack(side=right,fill=y)
messagebox=listbox(frame[0],height=25,fg='blue')
messagebox['yscrollcommand']=scrbar.set
messagebox.pack(expand=1,fill=both)
scrbar['command']=messagebox.yview
frame[0].pack(expend=1,fill=both)
entry=entry(frame[1],width=60,fg='blue')
entry.pack(fill=x,padx=10,pady=10)
#傳送訊息按鈕
send=button(self.frame[1],text='send',command=self.send)
send.pack(side=left,padx=20,pady=10)
#推出按鈕
quit=button(self.frame[1],text='quit',command=self.quit)
quit.pack(side=left,padx=20,pady=10)
frame[1].pack()
def send(self):
self.lock.acquire()
message=entry.get()
data=data(kind='message',to=name,from=self.clientname,message=message)
pickle.dump(data,self.fd)
entry.delete(0,len(message))
self.lock.release()
def quit(self):
top.quit()
def main():
client=client()
#mainloop()
if __name__=='__main__':
main()
執行緒通訊,多執行緒
多執行緒 thread handler thread處理一些複雜的業務邏輯 耗時的事情 handler在主線程中接收訊息的乙個物件 mhandler.sendmessage msg 傳送乙個訊息物件 mhandler.sendemptymessage what 傳送空訊息,只有what沒有obj m...
多執行緒 執行緒通訊
總結 今天小鹹兒來講解乙個好玩的事,那就是執行緒之間該如何通訊,執行緒通訊之後又會出現什麼問題?先來一張導圖來看看執行緒通訊的分布?疑問 如果想要執行緒按照使用者自定義的順序執行的話,那該如何操作呢?思考 如果能夠讓執行緒等待先執行的執行緒執行完,再執行不就能達到效果了嗎!果然出現問題之後,就會有對...
多執行緒 執行緒通訊
1.使用wait notify方法實現執行緒之間的通訊 1 有其他執行緒呼叫同乙個物件的notify或者notifyall方法 呼叫notify notifyall方法之前 2 被喚醒之後重新獲得物件的鎖 呼叫notify notifyall方法之後 編寫測試 如下 執行結果 2.管道通訊 管道流主...