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"))


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