Python-网络通信/进程/下载器/进程池等
2019-03-13 21:23
218 查看
urlib:
1,网络通信:
from urllib import request#网络通信模块 #相对路径:01.网络通信.py #绝对路径:E:\0312\01.网络通信.py def downloader(url,isPicture=False): ''' :param url: 网址 :param isPicture: 默认是False值,表示是文本,如果下载的是图片,此值将赋值为True :return: none---直接保存成文件,不需要返回值 ''' #路径最后为文件名 file_name = url.split('/')[-1] #请求得到响应 response = request.urlopen(url) #查看响应内容 content = response.read() #图片和文本区别保存 if isPicture: with open(file_name,'wb') as fp: fp.write(content) else: content = content.decode('utf-8') with open(file_name,'w',encoding='utf-8') as fp: fp.write(content) downloader('https://www.baidu.com/img/bd_logo1.png',isPicture=True)
http:
操作系统:
进程:
,2,编程实现唱歌跳舞这件事
import time def sing(): for i in range(3): time.sleep(1) print('唱第%d首歌儿'%i) def dance(): for i in range(3): time.sleep(1) print('跳第%d段舞蹈'%i) import os if __name__ == '__main__': sing() dance() print(os.getpid()) #小结,现在是唱完歌再跳舞,是一个串行操作 #想边唱歌边跳舞,并行操作,操作效率。 # 多任务:操作系统可以运行多个任务。 #单个CPU在任何时候只能执行一个任务。 # 因为CPU运算速度实在是太快了
3,使用进程实现多任务:
import time #进程实现多任务的步骤: # 1.导入模块: from multiprocessing import Process def sing(): for i in range(3): time.sleep(1) print('唱第%d首歌儿'%i) def dance(): for i in range(3): time.sleep(1) print('跳第%d段舞蹈'%i) if __name__ == '__main__': #2.创建进程 p = Process(target=sing) #3.启动 p.start() dance()
4,下载器:
from urllib import request from multiprocessing import Process import os def downloader(url,**kwargs): print('当前进程id:',os.getpid(),os.getppid()) print('关键字参数:',kwargs['pro']) #文件名 file_name = url.split('/')[-1] #网络请求 response = request.urlopen(url)#一个响应对象 #获取响应的内容 content = response.read() #保存 with open(file_name,'wb') as fp: fp.write(content) if __name__ == '__main__': # for i in range(1,5,1): # url = 'http://www.langlang2017.com/img/banner'+str(i)+'.png' # print(url) # p = Process(target=downloader,args=(url,)) # p.start() url_list = [ 'https://www.baidu.com/img/baidu_jgylogo3.gif', 'http://www.offcn.com/statics/images/zgimg/index2019.png' ] name_list = ['进程1--张翠花','进程2---赵铁蛋'] p_list = []#进程列表 i = 0 for url in url_list: n = name_list[i] i = i+1 p = Process(target=downloader,name=n,args=(url,),kwargs={'pro':"最高等级"}) print('子进程(%s)将要被运行~!'%p.name) p.start() p_list.append(p) for p in p_list: p.join() print('主进程id:',os.getpid()) #确保这一句代码在所有子进程结束 print('~~~~~~~~~~~~~~~~~~~~所有文件下载完成!~~~~~~~~~~~~~~~~~~~~~~~')
5,创建进程的方法二:
from multiprocessing import Process import os from urllib import request #步骤1:继承Process类 class Process_Class(Process): # 因为Process类本身也有__init___方法,这个子类相当于重写了这个方法。 # 但这样会带来一个问题,我们并没有完成的初始化一个进程类,所以就不能使用这个类继承的一些方法和属性。 #步骤2:使用父类初始化方法初始子类 def __init__(self,url): Process.__init__(self) self.url = url #步骤3:重写Process类中的run方法 def run(self): print('当前进程id:', os.getpid(), os.getppid()) # 文件名 file_name = self.url.split('/')[-1] # 网络请求 response = request.urlopen(self.url) # 一个响应对象 # 获取响应的内容 content = response.read() # 保存 with open(file_name, 'wb') as fp: fp.write(content) if __name__ == '__main__': url_list = [ 'https://www.baidu.com/img/baidu_jgylogo3.gif', 'http://www.offcn.com/statics/images/zgimg/index2019.png' ] for url in url_list: p = Process_Class(url) p.start()
6,进程池:
from multiprocessing import Pool import time,random def worker(msg): t_start = time.time() print('%s--开始执行'%(msg)) time.sleep(random.random())#模拟工作所消耗的时间 t_end = time.time() print('%s--执行完毕,消耗时间为:%0.2f'%(msg,t_end-t_start)) if __name__ == '__main__': p = Pool(3)#创建一个容量是3的进程池 for i in range(10): #将进程添加到进程池, # 格式:进程池.apply_async(func=单个进程要调用的目标,args=(参数1,参数2....)) #每次循环将会用空闲的子进程去调用目标 p.apply_async(func=worker,args=(i,))#异步操作 # p.apply(func=worker,args=(i,))#串行操作 print('-----------start----------') #关闭进程池,关闭后进程池将不再接收新的任务 p.close() #等待进程池中的所有子进程都结束后,注意:join一定要放在close后面。 p.join() print('------------end----------')
相关文章推荐
- python进程的通信:queue、进程池中的Queue
- python进程的通信:queue、进程池中的Queue
- Python基础学习(5)网络编程socket、文件上传、粘包问题、socketserver、IO多路复用、线程与进程、进程池、线程池、上下文管理、协程
- python网络编程-进程间数据通信(Queue,Pipe ,managers)
- python-11-队列,进程间、进程池间的通信
- python进程之间修改数据[Manager]与进程池[Pool]
- Python线程、进程、进程池、协程
- python中的进程间的通信之生产者消费者模型
- Python网络通信之socket模块(四)基于Tcp/Ip的TCP交互通信serve/client的编写过程
- Python 进程线程之间通信方式(1,基于队列的)
- Java RMI网络编程开发之一 JAVA“进程间”通信方式
- python网络编程之TCP通信实例和socketserver框架使用例子
- python并发编程之多进程1-----------互斥锁与进程间的通信
- Python多进程并发操作中进程池Pool的应用
- python中的进程间的通信之管道Pipe
- TCP实现在不同局域网下的两台电脑网络通信(Python实现)
- 进程(线程)间通信与网络通信的联系与比较
- 与网络通信相关的服务和应用进程无法加载和启动、windows通信端口初始化失败
- 使用命名管道通过网络在进程之间进行通信(C#)
- 11.python并发入门(part11 进程同步锁,以及进程池,以及callback的概念)