Git的使用git
1.打開CMD命令行,輸入cd Desktop進入桌面
編程
2.輸入 mkdir + ‘file name’建立文件,若是已有項目則輸入 cd + file name進入文件,若是在Git上已有項目而且在已有項目進行修改,則輸入cd clone + url服務器
3.若是第一次使用,則先初始化,git init網絡
4. git add + file name 把項目加入文件夾裏面多線程
5.git config -global 全局設置(第一次使用的時候設置)app
6. git log 查看日誌、git reset + 版本(回到某個版本)、git rm 刪除文件、git pull 先把服務器已有的東西下載本地再去pushsocket
7. git remote add origin + url 和 git push -u origin master 對文件進行上傳tcp
8.其它命令:git branch + file name創建新的分支、git checkout + 'file name'切換到新的分支、git merge + 'file name'合併兩個分支、git branch -d 'file name'刪除分支ui
多線程多進程url
進程-操做系統分配內存的基本單位,進程見的內存是相互隔離的。對於操做系統來講,一個正在執行的任務就是一個進程,每一個進程都有本身的地址空間、內存、數據棧以及其餘記錄其運行軌跡的輔助數據。操做系統管理在其上運行的全部進程,併爲這些進程公平地分配時間。不過各個進程有本身的內存空間、數據棧等,因此只能使用進程間的通訊(Inter-Process Communication, IPC),而不能直接共享信息。
線程-在一個進程內部,要同時幹多件事,就須要同時運行多個'子任務',咱們把進程內的這些'子任務'稱爲線程(Thread)。一個進程中的各個線程之間共享一片數據空間,因此線程之間能夠比進程之間更爲方便地共享數據以及相互通訊。在進程的整個運行過程當中,每一個線程都只作本身的事,在須要的時候跟其餘的線程共享運行的結果。
threading模塊包含了一個易於實現的鎖機制,能夠用於同步線程。能夠經過調用Lock()方法來建立一個新的鎖,這個方法將返回一個鎖對象。鎖對象擁有一個accquire(blocking)方法,能夠強制線程進行同步的工做。其中可選的blocking參數可以控制線程在嘗試得到鎖時是否等待。blocking參數設置爲0時,線程若沒法得到鎖,則當即返回0;blocking設置爲1時,線程若沒法得到鎖,則會被阻塞等待鎖的釋放。線程能夠經過release()方法來釋放一個再也不須要的鎖。
from socket import socket, AF_INET, SOCK_STREAM import datetime # stream 是tcp,DGRAM是udp def main(): # 建立一個基於TCP協議的套接字對象 # 由於咱們作的是應用級的產品或服務,因此能夠利用現有的傳輸服務來實施數據傳輸 server = socket(AF_INET, SOCK_STREAM) # 表示用的ipv4的地址(固定寫法)兩個參數可寫可不寫 server.bind(('10.7.189.130', 6663)) # 綁定IP地址(網絡上主機身份標識)和本機端口(用來區分不一樣服務ip地址的擴展) # 開始監聽客戶端的鏈接 server.listen(512) # 隊列的大小,最多排512個 print('服務器已經啓動,正在監聽') while True: client, addr = server.accept() # 經過accept方法接受客戶端的鏈接 # accept 方法是個阻塞式方法,若是沒有客戶端連上來,那麼accept方法就會讓代碼阻塞 # 直到有客戶端鏈接成功纔會有成功 # accept 方法返回一個元組,元組中第一個值表明客戶端的對象 # 第二個值又是一個元組,其中有客戶端的ip地址和端口 currenttime = datetime.datetime.now() print(addr, '鏈接成功') # client.send('hello'.encode('utf-8')) client.send(currenttime.__str__().encode('utf-8')) client.close() if __name__ == '__main__': main()
# 鏈接 from socket import socket def main(): client = socket() client.connect(('10.7.189.118', 6789)) data = client.recv(512) print(data.decode('utf-8'))
聊天室的服務端
from socket import socket from threading import Thread def main(): class RefreshScreenThread(Thread): def __init__(self, client): super().__init__() self._client = client def run(self): # 負責刷屏 while True: data = self._client.recv(1024) print(data.decode('utf-8')) nickname = input('請輸入你的暱稱:') myclient = socket() myclient.connect(('10.7.189.130', 11110)) RefreshScreenThread(myclient).start() running = True while running: content = input('請發言:') if content == 'byebye': myclient.send(content.encode('utf-8')) running == False else: msg = nickname + ':' + content myclient.send(msg.encode('utf-8')) if __name__ == '__main__': main()
聊天室的客戶端
from threading import Thread from socket import socket def main(): class ClientHandler(Thread): def __init__(self, client): super().__init__() self._client = client def run(self): while True: try: data = self._client.recv(1024) # 把數據接受下來直接發給別人,不用decode if data.decode('utf-8') == 'byebye': # 用戶說byebye後主動斷開鏈接 client.remove(self._client) self._client.close() break else: for client in clients: # if client != self._client: # 若是不想本身發給本身的話 client.send(data) except Exception as e: print(e) client.remove(self._client) # 發生異常就移除這個客戶端 break server = socket() # 命令行參數 sys.argv server.bind(('10.7.189.130', 11110)) server.listen(1024) clients = [] # 用於存多個客戶鏈接進來,並記錄信息保存在這個容器裏面 while True: curr_client, addr = server.accept() # 接收用戶請求 print(addr[0]) clients.append(curr_client) # 若是在while裏面進行收發消息,別人就沒法連入聊天室 # 因此起線程處理數據 ClientHandler(curr_client).start() if __name__ == '__main__': main()