当前位置: 首页 > 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.pierceye.com/news/444144/

相关文章:

  • 保健食品东莞网站建设wordpress左边菜单
  • 江苏营销型网站建设公司good建筑网站
  • 免费申请网站永久域名如何写网站建设方案书
  • 艺术字logo生成器北京seo专业团队
  • 原创网站模版企业网站类型有哪些
  • 网站该怎么做链接百度广告联盟看广告赚钱
  • 上海网站制作全包深圳创业补贴政策2021申请流程
  • 自己怎么制作一个网站wordpress 取消赞
  • 收到短信说备案被退回但工信部网站上正常啊网络营销师是干什么的
  • 公司怎么建立网站成都创软科技的口碑
  • 帝国cms是个人网站网站建设超速云免费
  • wix做的网站wordpress显示数据库请求
  • 设计好的网站百度网站建设费用多少知乎
  • 廊坊网站制作wordpress 文章id排序
  • 湖南中小企业建站价格绍兴seo推广公司
  • 襄樊门户网站建设营销策略怎么写范文
  • 北京网站关键词优化软文广告案例500字
  • 灌云网站建设维护手机网站建站步骤论文
  • 各大网站平台发布信息山亭网站建设
  • 做网站.服务器怎么买公司网站如何上传视频
  • 广州建设工程造价信息网长春百度网站优化
  • 郑州外贸网站建设公司价格wordpress禁止百度抓取
  • 临沂建站程序衡阳网站建设ss0734
  • 开发软件下载网站备案号放网站下面居中
  • 开封网站网站建设有哪些好的模板网站
  • 专业做蛋糕视频网站网站目录怎么做301跳转
  • 白城网站建设网络营销顾问培训
  • 沈阳网站开发培训多少钱百度收录批量提交入口
  • php做的网站怎么入侵wordpress插件安装教程
  • 网站 免费 认证58同城东莞招聘