当前位置: 首页 > news >正文

网站怎么做微信扫描登录网站采用wordpress

网站怎么做微信扫描登录网站,采用wordpress,怎么做网站的内部链接,运动服饰网站建设需求分析文章目录 程序和进程的概念 p173函数式创建子进程Process类常用的属性和方法1 p175Process类中常用的属性和方法2 p176继承式创建子进程 p177进程池的使用 p178并发和并行 p179进程之间数据是否共享 p180队列的基本使用 p180使用队列实现进程之间的通信 p182函数式创建线程 p18… 文章目录 程序和进程的概念 p173函数式创建子进程Process类常用的属性和方法1 p175Process类中常用的属性和方法2 p176继承式创建子进程 p177进程池的使用 p178并发和并行 p179进程之间数据是否共享 p180队列的基本使用 p180使用队列实现进程之间的通信 p182函数式创建线程 p183继承式创建线程 p184线程之间数据共享 p185 程序和进程的概念 p173 进程是运行态的程序 函数式创建子进程 fork可以用于unix类的操作系统linuxmacos 但是在windows系统中只能使用Process详见下 第一种创建进程的语法结构 Process(groupNone,target,name,args,kwargs)参数说明 1、group表示分组实际上不使用值默认为None即可可不写 2、target表示子进程要执行的任务支持函数名 3、name表示子进程的名称可不写 4、args表示调用函数的位置参数以元组的形式进行传递有就写 5、kwargs表示调用函数的关键字参数以字典的形式进行传递有就写 代码实例1 import multiprocessing import os import timedef test():print(f我是子进程我的PID是{os.getpid()}我的父进程是{os.getppid()})time.sleep(1)if __name____main__:print(主进程开始执行)lst[]# 创建五个子进程for i in range(5):# 创建单个子进程pmultiprocessing.Process(targettest) # 返回值类型为class multiprocessing.context.Processprint(type(p))# 启动子进程p.start()# 启动中的进程加到列表中lst.append(p)print(主进程执行结束)上面的运行结果是主进程先结束子进程在逐个结束 若要求所有子进程中的代码执行结束主进程在结束可以使用join()方法阻塞见下面 import multiprocessing import os import timedef test():print(f我是子进程我的PID是{os.getpid()}我的父进程是{os.getppid()})time.sleep(1)if __name____main__:print(主进程开始执行)lst[]# 创建五个子进程for i in range(5):# 创建单个子进程pmultiprocessing.Process(targettest) # 返回值类型为class multiprocessing.context.Process# 启动子进程p.start()# 启动中的进程加到列表中lst.append(p)for item in lst:item.join() # 阻塞主进程print(主进程执行结束)Process类常用的属性和方法1 p175 方法/属性名称功能描述name当前进程实例别名默认为Process-Npid当前进程对象的PID值is_alive()进程是否执行完没执行完结果为True否则为Falsejoin(timeout)等待结束或传入了参数就是等待timeout秒start()启动进程run()若没有指定target参数则启动进程后会调用父类中的run方法terminate()强制终止进程 代码实例 import os,multiprocessing,timedef sub_process(name):print(f子进程pid{os.getpid()},父进程的pid{os.getppid()}入参name{name})time.sleep(1)def sub_process2(name):print(f子进程pid{os.getpid()},父进程的pid{os.getppid()}入参name{name})time.sleep(1)if __name__ __main__: # 直接写main# 主进程print(父进程开始执行)for i in range(5):# 创建第一个子进程p1multiprocessing.Process(targetsub_process,args(ysj,))# 创建第二个子进程p2multiprocessing.Process(targetsub_process2,args(18,))# 调用Process类的start方法启动子进程p1.start()p2.start()# 调用进程对象的类属性print(p1.name,是否执行完毕,not p1.is_alive())print(p2.name, 是否执行完毕, not p2.is_alive())p1.join() # 主程序阻塞等待p1结束p2.join() # 主程序阻塞等待p2结束print(父进程执行结束)Process类中常用的属性和方法2 p176 代码实例1 import os,multiprocessing,timeif __name__ __main__: # 直接写main# 主进程print(父进程开始执行)for i in range(5):# 创建第一个子进程p1multiprocessing.Process() # 没有给定taget参数会调用执行Process类中的run方法# 创建第二个子进程p2multiprocessing.Process()p1.start() # 调用Process类中的run方法去执行p2.start()print(父进程执行结束)代码实例2 import os,multiprocessing,timedef sub_process(name):print(f子进程pid{os.getpid()},父进程的pid{os.getppid()}入参name{name})time.sleep(1)def sub_process2(name):print(f子进程pid{os.getpid()},父进程的pid{os.getppid()}入参name{name})time.sleep(1)if __name__ __main__: # 直接写main# 主进程print(父进程开始执行)for i in range(5):# 创建第一个子进程p1multiprocessing.Process(targetsub_process,args(ysj,)) # 没有给定taget参数会调用执行Process类中的run方法# 创建第二个子进程p2multiprocessing.Process(targetsub_process2,args(18,))p1.start()p2.start()# 强制终止进程p1.terminate()p2.terminate()print(父进程执行结束)继承式创建子进程 p177 第二种创建进程的语法结构 class 子进程(Process): # 继承Process类然后去重写run方法pass代码实例 import multiprocessing,time,os# 自定义一个类 class SubProcess(multiprocessing.Process): # 继承Process类# 编写一个初始化方法def __init__(self,name):# 调用父类的初始化方法super().__init__()self.namename# 重写父类的run方法def run(self):print(f子进程的名称{self.name}PID是{os.getpid()}父进程的PID是{os.getppid()})if __name__ __main__:print(父进程开始执行)lst[]for i in range(1,6):p1SubProcess(f进程{i})# 启动进程p1.start() # 没有参数会调用run方法lst.append(p1)# 阻塞主进程等待子进程执行完毕for item in lst:item.join()print(父进程执行结束)进程池的使用 p178 若要创建、管理的进程有上百个创建、销毁线程要消耗大量的时间。进程池可以解决这个问题 进程池的原理 创建一个进程池并设置进程池中最大的进程数量。假设进程池中最大的进程数为3现在有10个任务需要执行name进程池一次可以执行3个任务4次即可完成全部任务的执行。 创建进程池的语法结构 进程池对象Pool(N)方法名功能描述apply_async(func,args,kwargs)使用非阻塞方式调用函数funcapply(func,args,kwargs)使用阻塞方式调用函数funcclose()关闭进程池不再接受新任务terminate()不管任务是否完成立即终止join()阻塞主进程必须在terminate()或close()之后使用 代码实例非阻塞运行进程池 import multiprocessing,os,time# 编写任务 def task(name):print(f子进程的PID{os.getpid()}父进程的PID{os.getppid()}执行的任务{name})time.sleep(1)if __name__ __main__:# 主进程starttime.time() # 返回时间戳单位是秒print(start,:父进程开始执行)# 创建进程池pmultiprocessing.Pool(3)# 创建任务for i in range(10):# 以非阻塞方式p.apply_async(functask,args(i,))# 关闭进程池不再接收新任务p.close()# 阻塞主进程等待子进程执行完毕p.join()print(time.time()-start)print(父进程执行结束)代码实例阻塞运行进程池 import multiprocessing,os,time# 编写任务 def task(name):print(f子进程的PID{os.getpid()}父进程的PID{os.getppid()}执行的任务{name})time.sleep(1)if __name__ __main__:# 主进程starttime.time() # 返回时间戳单位是秒print(start,:父进程开始执行)# 创建进程池pmultiprocessing.Pool(3)# 创建任务for i in range(10):# 非阻塞方式p.apply(functask,args(i,))# 关闭进程池不再接收新任务p.close()# 阻塞主进程等待子进程执行完毕p.join()print(time.time()-start) # 非阻塞用了4秒多阻塞方式用了10秒多print(父进程执行结束)并发和并行 p179 并发 是指两个或多个事件在 同一时间间隔 发生多个任务被交替轮换着执行比如A事件在吃苹果在吃苹果的过程中有快递员敲门让你收下快递收快递就是B事件name收完快递继续吃没吃完的苹果。就是并发。 并行 指两个或多个事件在同一时刻发生多个任务在同一时刻在多个处理器上同时执行。比如A事件是泡脚B事件是打电话C事件是记录电话内容这三件事则可以在同一时刻发生这就是并行。 进程之间数据是否共享 p180 Python当中的并行对应多进程 代码实例 import multiprocessing,osa100def add():print(子进程1开始执行)global aa30print(a,a)print(子进程1执行完毕)def sub():print(子进程2开始执行)global aa-50print(a,a)print(子进程2执行完毕)if __name__ __main__:# 父进程print(父进程开始执行)# 创建加的子进程p1multiprocessing.Process(targetadd)# 创建减的子进程p2multiprocessing.Process(targetsub())# 启动子进程p1.start()p2.start()# 主进程阻塞等待子进程执行完成p1.join()p2.join()print(父进程结束执行)发现结果分别为 130和50由此发现多进程之间的数据不是共享的子进程1中有一份a子进程2中还有另一份a 如何解决进程之间的数据共享见下一节 队列的基本使用 p180 进程之间可以通过队列queue进行通信 队列是一种先进先出的数据结构 创建队列的语法结构 队列对象Queue(N)方法名称功能描述qsize()获取当前队列包含的消息数量empty()判断队列是否有空为空结果为True否则为Falsefull()判断队列是否满了满结果为True否则为Falseget(blockTrue)获取队列中的一条消息然后从队列中移除block默认值为True队列为空时会阻塞等待消息get_nowait()相当于 get(blockFalse) 消息队列为空时抛出异常put(item,blockTrue)将item消息放入队列block默认为True队列满时会阻塞等待队列有空间put_nowait(item)相当于 put(item,blockFalse) 代码实例 import multiprocessingif __name__ __main__:# 创建一个队列qmultiprocessing.Queue(3) # 这个队列最多可以接收3条信息print(队列是否有空,q.empty())print(队列是否为满,q.full())print(队列中的消息数,q.qsize())print(-*88)# 向队列中添加信息q.put(hello)q.put(world)print(队列是否有空, q.empty())print(队列是否为满, q.full())print(队列中的消息数, q.qsize())print(-*88)q.put(11111111)print(队列是否有空, q.empty())print(队列是否为满, q.full())print(队列中的消息数, q.qsize())print(- * 88)print(q.get())print(队列中的消息数, q.qsize())print(q.get())print(q.get())print(队列中的消息数, q.qsize()) 队列的遍历 for i in range(q.qsize()):q.get_nowait()使用队列实现进程之间的通信 p182 代码实例1 import multiprocessingif __name__ __main__:qmultiprocessing.Queue(3)# 向队列中添加元素q.put(hello)q.put(world)q.put(python)q.put(html,blockTrue,timeout2) # 阻塞等待最多两秒若到了两秒会报错返回代码实例2 import multiprocessing,timea100# 入队 def write_msg(q):global a # 要在函数内使用全局变量一定要先用此方法声明if not q.full():for i in range(6):a-10q.put(a)print(fa入队时的值{a})# 出队 def read_msg(q):time.sleep(1)while q.qsize()0:print(f出队时a的值:{q.get()})if __name__ __main__:print(父进程开始执行)qmultiprocessing.Queue() # 不写参数表示队列接收的消息个数是没有上限的# 创建两个子进程p1multiprocessing.Process(targetwrite_msg,args(q,))p2multiprocessing.Process(targetread_msg, args(q,))# 启动两个子进程p1.start()p2.start()# 等待写的进程结束再去执行主进程p1.join()p2.join()print(父进程执行完毕)函数式创建线程 p183 线程是cpu可调度的最小单位被包含在进程中是进程中实际的运作单位。 一个进程可以拥有N多个线程并发执行而每个线程并行执行不同的任务。 创建线程的方法有两种函数式创建线程和继承式创建线程 函数式创建线程的语法结构 tThread(group,target,name,args,kwargs)参数说明 1、group创建线程对象的进程组 2、target创建线程对象所要执行的目标函数 3、name创建线程对象的名称默认为 Thread-n 4、args用元组以位置参数的形式传入target对应函数的参数 5、kwargs用字典以关键字参数的形式传入target对应函数的参数 代码实例 import threading,time# 编写线程执行函数 def test():for i in range(3):time.sleep(1)print(f线程名{threading.current_thread().name}正在执行{i}) # 获取当前的线程对象threading.current_thread()if __name__ __main__:starttime.time()print(主线程开始执行)# 线程lst[threading.Thread(targettest) for i in range(2)]for item in lst: # item的数据类型就是Thread类型# 启动线程item.start()for item in lst:item.join()print(主线程执行完毕)print(f一共耗时{time.time()-start}秒)# 一共有一个进程三个线程一个主线程两个子线程继承式创建线程 p184 使用Thread子类创建线程的操作步骤 1、自定义类继承threading模块下的Thread类 2、实现run方法 代码实例 import threading,timeclass SubThread(threading.Thread):def run(self):for i in range(3):time.sleep(1)print(f线程{threading.current_thread().name}正在执行{i})if __name__ __main__:print(主线程开始执行)# 使用列表生成式去创建线程对象lst[SubThread() for i in range(2)]for item in lst:item.start()for item in lst:item.join()print(主线程执行完毕)线程之间数据共享 p185 线程之间的数据可以共享吗 import threadinga100def add():print(加线程开始执行)global aa30print(fa的值为{a})print(加线程执行完成)def sub():print(减线程开始执行)global aa-50print(fa的值为{a})print(减线程执行完成)if __name__ __main__:print(主线程开始执行)print(f全局变量a的值为{a})addthreading.Thread(targetadd)subthreading.Thread(targetsub)add.start() # a130sub.start() # a80add.join()sub.join()print(主线程执行完成)由此可以得到结论线程之间是可以共享数据的进程之间不可以共享数据
http://www.zqtcl.cn/news/444144/

相关文章:

  • 上海市建设咨询协会网站asp网站源码
  • 大家都在哪些网站上做医药招商wordpress po文件
  • 国外主题网站兰州app
  • 建设项目自主验收公示网站dedecms英文外贸网站企业模板下载
  • 做网站要服务器吗前端企业网站开发
  • 用html写一个个人介绍多网站怎么做seo
  • 做网站打广告犯法吗中国建设投资集团 网站首页
  • 怎么免费申请个人网站职业技能培训有哪些
  • 小型的企业网站湖南备案网站建设方案书
  • 现在做网站公司seo怎么做教程
  • asp化妆品网站windows优化大师有必要安装吗
  • 网站流量分析系统制作图片网站
  • 做网站技术路线广州番禺发布公众号
  • 企业网站自己可以做吗服装网站建设的利益分析
  • 网站做软件居众装饰集团有限公司
  • 南山网站制作联系电话芒果国际影城星沙店
  • 珠海网站设计费用建企业版网站多久
  • linux 网站搬家wordpress 卸载plugin
  • 江苏省建设厅网站 投诉编辑网站的软件手机
  • 深圳地图各区分布图seo网络优化师就业前景
  • 北京网站备案代理国家企业信用信息公示系统广东
  • 推销网站重庆网站优化公司哪家便宜
  • 外贸公司网站搭建礼品网站建设
  • 网站建设 今晟网络中国制造网官网登录
  • 东莞网站设计如何常州做网站设计
  • php网站数据库修改网站备案有必要吗
  • 电商会学着做网站呢WordPress又拍云cdn
  • 网站健设推广产品多少钱网站规划有什么意义
  • 诚信网站备案中心内江网站建设新闻
  • 品牌形象网站有哪些百度应用中心