Python 正則表達式 網絡編程 、生產者消費者模式

生產者是一堆線程,消費者是另一堆線程,內存緩存區可以使用list數組隊列,數據類型是需要一個簡單的類就好。關鍵是如何處理多線程之間的協作。這其實也是多線程通信的一個範例

網絡編程:實現計算機與計算機之間的通信。

Pop3郵局協議版本 是tcp/ip協議族中的協議。

ftp文件傳輸協議

http基於tcp的協議。

Tcp協議是可靠可寫的狀態長鏈接的協議像打電話一樣。

Udp協議,不可靠無連接,像發短信一樣,發送的包的順序需要編號。

Qq視頻

Smtp簡單郵件傳輸協議。

郵件服務器

Web服務器

192.168.0.0 局域網都是用192.168.

IP地址分5類:

P地址分爲A,B,C,D,E五類。

網絡號:用於識別主機所在的網絡;
主機號:用於識別該網絡中的主機。

其中A類分配給政府機關使用,B類地址給大中型企業使用,C類地址給個人使用。這三種是主要的。

IP地址分爲五類,A保留給政府機構,B分配給中等規模的公司,C分配給任何需要的人,D用於組播,E用於實驗,各類可容納的地址數目不同。

其中A類、B類、和C類這三類地址用於TCP/IP節點,其它兩類D類和E類被用於特殊用途。
A
BC三類IP地址的特徵:當將IP地址寫成二進制形式時,A類地址的第一位總是OB類地址的前兩位總是10C類地址的前三位總是110

1. A類地址
A類地址第1字節爲網絡地址,其它3個字節爲主機地址。
A類地址範圍:1.0.0.1—126.155.255.254  126是網絡IP
A類地址中的私有地址和保留地址:
 10.X.X.X是私有地址(所謂的私有地址就是在互聯網上不使用,而被用在局域網絡中的地址)。
 127.X.X.X是保留地址,用做循環測試用的。

2. B
類地址
B類地址第1字節和第2字節爲網絡地址,其它2個字節爲主機地址。
B類地址範圍:128.0.0.1—191.255.255.254192.255網絡IP   255.254主機IP
B類地址的私有地址和保留地址
 172.16.0.0—172.31.255.255是私有地址
 169.254.X.X是保留地址。如果你的IP地址是自動獲取IP地址,而你在網絡上又沒有找到可用的DHCP服務器。就會得到其中一個IP

3. C類地址
C類地址第1字節、第2字節和第3個字節爲網絡地址,第4個個字節爲主機地址。另外第1個字節的前三位固定爲110
C類地址範圍:192.0.0.1—223.255.255.254223.255.255網絡地址  254主機地址
C類地址中的私有地址:
192.168.X.X是私有地址。

4. D
類地址
D類地址不分網絡地址和主機地址,它的第1個字節的前四位固定爲1110
D類地址範圍:224.0.0.1—239.255.255.254

5. E
類地址
E類地址也不分網絡地址和主機地址,它的第1個字節的前五位固定爲11110
E類地址範圍:240.0.0.1—255.255.255.254

 

域名  每一個IP地址都有唯一一個域名。域名和IP怎麼連接?是由域名服務器。

一個域名可以掛好幾個網站。

空間:申請域名空間,網站掛在空間裏。

域名服務器:com、cn、gov。

大型網站有多個服務器 (集羣)。

192.168.1.6

網慣和網段一樣192.168.220.0

服務器就是域名:離自己最近的服務器。

共享文件\\192.168.1.1

創建共享用戶:我的電腦-右鍵管理-用戶管理。

#
#生產者消費者模式
#首先,消費者函數從隊列中取一次數值然後調用q.task_done()通知生產者函數,<font color="#ff0000">該元素</font>我已經取過了,直到將全部元素取出。
   # 在生產者函數中調用q.join()時,函數被掛起,直到隊列的數據被全部取走,函數才能繼續執行,生產者函數執行結束後,消費者函數還在等待隊列中的數據,
# 但此時消費者函數已經沒有存活的必要,所以當主進程結束時,可以將該執行消費者函數的子進程帶走,設置爲守護進程即可'''
import os
import time
from multiprocessing import Process, JoinableQueue
def producer0(q):
    for i in range(5):
        print('%s 生產了 %s' % (os.getpid(), i))
        q.put(i)
    q.join()
def producer1(q):
    for i in range(5):
        print('%s 生產了 %s' % (os.getpid(), i))
        q.put(i)
    q.join()
def producer2(q):
    for i in range(5):
        print('%s 生產了 %s' % (os.getpid(), i))
        q.put(i)
    q.join()
def consumer(q):
    while 1:
        res = q.get()
        time.sleep(3)
        print('%s 消費了 %s' % (os.getpid(), res))
        q.task_done()
if __name__ == '__main__':
    q = JoinableQueue()
    p1 = Process(target=producer0, args=(q,))
    p2 = Process(target=producer1, args=(q,))
    p3 = Process(target=producer2, args=(q,))
    p4 = Process(target=consumer, args=(q,))
    p5 = Process(target=consumer, args=(q,))
    p_l = [p1, p2, p3, p4, p5]
    #數據取完後消費者還在等着數據加入隊列,但是生產者函數已經結束了,所以消費者可以隨着主進程的結束而結束,所以將消費者函數設置爲守護進程。
    p4.daemon = True
    p5.daemon = True
    for p in p_l:
        p.start()
    p1.join()
    p2.join()
    p3.join()
    print('主進程')
    #-------------------------------

#正確表達式
#re.match 嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。
import re
print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())         # 不在起始位置匹配
print(re.match('com', 'www.runoob.com'))         # 不在起始位置匹配


#group(num=0)	匹配的整個表達式的字符串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
#groups()	返回一個包含所有小組字符串的元組,從 1 到 所含的小組號。
import re

line = "Cats are smarter than dogs"; #字符串
searchObj = re.search(r'(.*) are (.*?) .*', line, re.M | re.I)  #r代表原樣輸出  .*代表任意字符 .*?代表只匹配第一個組合  reM代表多行匹配  帶括號的都是分組
if searchObj:
    print("searchObj.group() : ", searchObj.group())
    print("searchObj.group(1) : ", searchObj.group(1))
    print("searchObj.group(2) : ", searchObj.group(2))
else:
    print("Nothing found!!")

#------------------------------------------------------

#epl 參數是一個函數
#以下實例中將字符串中的匹配的數字乘於 2:
import re
# 將匹配的數字乘於 2
def double(matched):
    value = int(matched.group('value'))
    return str(value * 2)
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))
#----------------------------------------------------------------

#字符串日期轉換爲易讀的日期格式
import datetime

now = datetime.datetime.now()
print(now)
t_str = '2013-11-30 20:44:07'
d = datetime.datetime.strptime(t_str, '%Y-%m-%d %H:%M:%S')
#----------------------------------------------------------------------
#計算字符串中子串出現的次數
s="google.com"
print("o",s.count("o"))


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章