本文实例讲述了python实现通过队列完成进程间的多任务功能。分享给大家供大家参考,具体如下:
import multiprocessing def download_data(q): """下载数据""" # 模拟从网上下载数据 data = [11, 22, 33, 44] # 向队列中写入数据 for temp in data: q.put(temp) print("----数据下载完成并且已存入队列----") def analysis_data(q): """数据处理""" waitting_analysis_data = list() # 从队列中获取数据 while True: data = q.get() waitting_analysis_data.append(data) if q.empty(): break print(waitting_analysis_data) def main(): # 1.创建一个队列 q = multiprocessing.Queue() q1 = multiprocessing.Process(target=download_data, args=(q,)) q2 = multiprocessing.Process(target=analysis_data, args=(q,)) q1.start() q2.start() if __name__ == '__main__': main()
在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁进程也需要消耗时间。第二即便开启了成千上万的进程,操作系统也不能让他们同时执行,这样反而会影响程序的效率。因此我们不能无限制的根据任务开启或者结束进程。那么我们要怎么做呢?
在这里,要给大家介绍一个进程池的概念,定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中的进程来处理任务,等到处理完毕,进程并不关闭,而是将进程再放回进程池中继续等待任务。如果有很多任务需要执行,池中的进程数量不够,任务就要等待之前的进程执行任务完毕归来,拿到空闲进程才能继续执行。也就是说,池中进程的数量是固定的,那么同一时间最多有固定数量的进程在运行。这样不会增加操作系统的调度难度,还节省了开闭进程的时间,也一定程度上能够实现并发效果。
from multiprocessing import Pool import os, time, random def worker(msg): t_start = time.time() print("进程%s开始执行,进程号为%d" % (msg, os.getpid())) # random.random()随机生成0-1之间的浮点数 time.sleep(random.random()*2) t_stop = time.time() print("进程",msg,"执行完成,耗时%0.2f" % (t_stop-t_start)) def main(): # 定义一个进程池,最大进程数为3 po = Pool(3) for i in range(10): # Pool().apply_async(要调用的目标,(传递给目标的参数元组,)) # 每次循环将会用空闲出来的子进程去调用目标 po.apply_async(worker,(i,)) print("----start----") # 关闭进程池,关闭后po不再接受新的请求 po.close() # 等待po中所有子进程执行完成,必须放在close语句之后 po.join() print("----end----") if __name__ == '__main__': main()
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
本文向大家介绍Python通过队列来实现进程间通信的示例,包括了Python通过队列来实现进程间通信的示例的使用技巧和注意事项,需要的朋友参考一下 Python程序中,在进程和进程之间是不共享全局变量的数据的。 我们来看一个例子: 进程 p1 里对全局变量 nums 循环进行处理,进程 p2 将 nums 打印出来,发现 nums 的值没有变化。 运行结果: in process1 pid=578
本文向大家介绍Python实现简单多线程任务队列,包括了Python实现简单多线程任务队列的使用技巧和注意事项,需要的朋友参考一下 最近我在用梯度下降算法绘制神经网络的数据时,遇到了一些算法性能的问题。梯度下降算法的代码如下(伪代码): 一般来说,当网络请求 plot.ly 绘图时会阻塞等待返回,于是也会影响到其他的梯度下降函数的执行速度。 一种解决办法是每调用一次 plotly.write 函数
本文向大家介绍python实现的多任务版udp聊天器功能案例,包括了python实现的多任务版udp聊天器功能案例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python实现的多任务版udp聊天器。分享给大家供大家参考,具体如下: 说明 编写一个有2个线程的程序 线程1用来接收数据然后显示 线程2用来检测键盘数据然后通过udp发送数据 要求 实现上述要求 总结多任务程序的特点 参考代码
本文向大家介绍Python Process多进程实现过程,包括了Python Process多进程实现过程的使用技巧和注意事项,需要的朋友参考一下 进程的概念 程序是没有运行的代码,静态的; 进程是运行起来的程序,进程是一个程序运行起来之后和资源的总称; 程序只有一个,但同一份程序可以有多个进程;例如,电脑上多开QQ; 程序和进程的区别在于有没有资源,进程有资源而程序没有资源,进程是一个资源分配的
本文向大家介绍python进程池实现的多进程文件夹copy器完整示例,包括了python进程池实现的多进程文件夹copy器完整示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python进程池实现的多进程文件夹copy器。分享给大家供大家参考,具体如下: 应用:文件夹copy器(多进程版) 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、
本文向大家介绍python实现的多线程端口扫描功能示例,包括了python实现的多线程端口扫描功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python实现的多线程端口扫描功能。分享给大家供大家参考,具体如下: 下面的程序给出了对给定的ip主机进行多线程扫描的Python代码 运行效果图 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python URL操作技巧总结》