python之路——40

Posted wan2-0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之路——40相关的知识,希望对你有一定的参考价值。

复习

1.管道
2.数据共享 Manager
3.进程池
1.map
1.返回所有结果列表
2.异步 自带close和join
2.apply
1.同步
3.apply_async
1.异步:func被注册进入一个进程,程序继续执行
2.返回值为一个相关对象

学习内容

1.线程与进程
1.进程——最小的内存分配单位
2.线程——操作系统调度的最小单位
3.线程被CPU执行
4.进程至少含有一个线程
5.起线程需要的时间和空间小于进程
6.多个线程内部有自己的数据栈,这个不能共享
7.全局变量在多个线程间共享
2.起线程的两种方式
3.进程中存储:导入的模块,文件所在的位置,代码,
主线程:主线程代码中的变量、对象
子线程:少量必要的数据
4.全局解释器锁 GIL
1.锁的是线程
2.导致cpu利用率不充分,保证数据安全
3.不是python的问题,是Cpython解释器的问题
4.编译型语言——编译后,很大程度避免了数据安全问题
解释性语言
5.高CPU:计算类——高CPU利用率
高IO:多延时

代码区

1.多进程 爬取网页代码长度

from multiprocessing import Pool
from urllib.request import urlopen
def get(url):
    ret = urlopen(url)
    return url, ret.read().decode(utf-8)
def handle(args):
    url, content = args
    print(url,len(content))
if __name__ == __main__:
    url_lst = [
        http://www.baidu.com,
        https://pan.baidu.com/s/1UwzvTS5o0MB2KQSerNeaWA?fid=809605274381911,
        http://gufenso.coderschool.cn/#
        http://www.miit.gov.cn/
    ]
    p = Pool()
    for url in url_lst:
        p.apply_async(get,args=(url,),callback=handle)
    p.close()
    p.join()

2.多进程 爬取电影

import re
from multiprocessing import Pool
from urllib.request import urlopen

def get_page(url,pattern):
    response = urlopen(url).read().decode(utf-8)
    return pattern,response
def parse_page(info):
    pattern, ret = info
    res = re.findall(pattern,ret)
    ret_str = ‘‘
    for item in res:
        dic1={
            index:item[0].strip(),
            title:item[1].strip(),
            actor:item[2].strip(),
            time:item[3].strip(),
        }
        dic1_str = str(dic1) + \n
        ret_str = dic1_str + ret_str
    print(ret_str)
    return ret_str
if __name__ == __main__:
    # 生成带handel网页列表
    url_lst = []
    for i in range(0,91,10):
        url_lst.append(https://maoyan.com/board/4?offset=%d%i)
    print(url_lst)
    # 正则编译
    regex = r<dd>.*?<i class="board-index board-index-.*?">(\d+)</i>.*?title="(.*?)".*?"star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>.*?</dd>
    pattern = re.compile(regex,re.S)
    # 起进程
    res_l = []
    p = Pool()
    for url in url_lst:
        res = p.apply_async(get_page,args=(url,pattern),callback=parse_page)
        res_l.append(res)
    p.close()
    p.join()

3.线程

import time,os
from threading import Thread
def func(i):
    time.sleep(1)
    global g
    if g == 100:
        g = 0
        print(in %s,%s%(i,g))
    print(in func %s, pid:%s,g=%s%(i,os.getpid(),g))

g = 100
t_list = []
for i in range(10):
    t = Thread(target=func,args=(i,))
    t.start()
    t_list.append(t)
for i in t_list:i.join()
print(g)

4.多线程 效率

from multiprocessing import Process
from threading import Thread
import time
def func(n):
    n + 1
if __name__ == __main__:
    p_list = []
    t_sta1 = time.time()
    for i in range(100):
        p = Process(target=func,args=(i,))
        p.start()
        p_list.append(p)
    for i in p_list:
        i.join()
    t1 = time.time() - t_sta1


    t_list = []
    t_sta2 = time.time()
    for i in range(100):
        t = Thread(target=func,args=(i,))
        t.start()
        t_list.append(t)
    for i in t_list:
        i.join()
    t2 = time.time() - t_sta2
    print(t1,t2)

5.threading模块方法

import threading
threading.current_thread()
threading.get_ident()
threading.active_count() # 包括主线程
threading.enumerate()

6.多线程实现socketserver

# server
import socket
from threading import Thread
def func(conn):
    while True:
        info = input(>>> )
        conn.send(info.encode(utf-8))
        msg = conn.recv(1204).decode(utf-8)
        print(msg)
sk = socket.socket()
sk.bind((127.0.0.1,8080))
sk.listen()
while True:
    conn, addr = sk.accept()
    t = Thread(target=func,args=(conn,))
    t.start()
conn.close()
sk.close()

#client
import socket
sk = socket.socket()
sk.connect((127.0.0.1,8080))
while 1:
    msg = sk.recv(1024).decode(utf-8)
    print(msg)
    ret = input(>>> )
    sk.send(ret.encode(utf-8))
sk.close()

 

以上是关于python之路——40的主要内容,如果未能解决你的问题,请参考以下文章

《Python学习之路 -- Python基础之切片》

40.python全栈之路:进程与线程

python之路——40

小白python爬虫之路——构造URL集

Python工程师Java之路(s)时间戳转字符串

Python工程师Java之路(s)时间戳转字符串