import multiprocessing
import time
import os
import random
g_nums = [11, 22, 33] def test1():
while True:
print("子进程PID = %d,父进程PID = %d" % (os.getpid(), os.getppid()))
time.sleep(1) def test2(a, b, c, *args, **kwargs):
print(a)
print(b)
print(c)
print(args)
print(kwargs) def test3():
global g_nums
g_nums.append(44)
print("test3:", end="")
print(g_nums) def test4():
global g_nums
print("test4:", end="")
print(g_nums) def download_from_web(q):
""" 下载数据 """
# 模拟从网上下载数据
data = [11, 22, 33, 44]
# 向队列中写入数据
for temp in data:
q.put(temp)
print("下载器已经下载完了数据,并存入到了队列中!") def analysis_data(q):
""" 数据处理 """
wait_analysis_data = list()
while True:
data = q.get()
wait_analysis_data.append(data)
if q.empty():
break
print("模拟数据处理:" + str(wait_analysis_data)) def work(msg):
t_start = time.time()
print("%d开始执行,进程PID:%d" % (msg, os.getppid()))
# random.random()随机生成0~1之间的浮点数
time.sleep(random.random() * 2)
t_stop = time.time()
print("%d执行完毕,耗时%0.2f" % (msg, t_stop - t_start)) def main():
print("主进程PID = %d,父进程PID = %d" % (os.getpid(), os.getppid()))
# 创建一个队列
q = multiprocessing.Queue()
# 定义一个进程池,最大进程数3
po = multiprocessing.Pool(3)
p1 = multiprocessing.Process(target=test1)
p2 = multiprocessing.Process(target=test2, args=(11, 22, 33, 44, 55, 66, 77), kwargs={"籍贯": "常山", "姓名": "赵子龙"})
p3 = multiprocessing.Process(target=test3)
p4 = multiprocessing.Process(target=test4)
# 创建多个进程,将队列的引用当做实参传递到里面
p5 = multiprocessing.Process(target=download_from_web, args=(q,))
p6 = multiprocessing.Process(target=analysis_data, args=(q,))
# p1.start()
# p2.start()
# # 进程3 和 进程4 说明:多进程之间不共享全局变量
# p3.start()
# p4.start()
# # 进程5 和 进程6 演示了多进程之间通过Queue 来实现数据共享
# p5.start()
# p6.start()
for i in range(1, 11):
# Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))
# 每次循环将会用空闲出来的子进程去调用目标
po.apply_async(work, args=(i,))
print("------start------")
# 关闭进程池,关闭后po不再接收新的请求
po.close()
# 等待po中所有子进程执行完成,必须放在close语句之后
po.join()
print("------end------") if __name__ == '__main__':
main()

Python 多进程编程的更多相关文章

  1. Python多进程编程

    转自:Python多进程编程 阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiproces ...

  2. 【转】Python多进程编程

    [转]Python多进程编程 序. multiprocessingpython中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Pytho ...

  3. Python 多进程编程之 进程间的通信(在Pool中Queue)

    Python 多进程编程之 进程间的通信(在Pool中Queue) 1,在进程池中进程间的通信,原理与普通进程之间一样,只是引用的方法不同,python对进程池通信有专用的方法 在Manager()中 ...

  4. Python 多进程编程之 进程间的通信(Queue)

    Python 多进程编程之 进程间的通信(Queue) 1,进程间通信Process有时是需要通信的,操作系统提供了很多机制来实现进程之间的通信,而Queue就是其中的一个方法----这是操作系统开辟 ...

  5. 深入理解python多进程编程

    1.python多进程编程背景 python中的多进程最大的好处就是充分利用多核cpu的资源,不像python中的多线程,受制于GIL的限制,从而只能进行cpu分配,在python的多进程中,适合于所 ...

  6. Python 简明教程 --- 26,Python 多进程编程

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 学编程最有效的方法是动手敲代码. 目录 1,什么是多进程 我们所写的Python 代码就是一个程序, ...

  7. day-4 python多进程编程知识点汇总

    1. python多进程简介 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心.Python提供了非常好用的多进程包multiprocessing,他提供了一 ...

  8. python多进程编程(二)

    进程同步(锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进 ...

  9. python多进程编程(一)

    multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Pyt ...

  10. Python多进程编程(转)

    原文:http://www.cnblogs.com/kaituorensheng/p/4445418.html 阅读目录 1. Process 2. Lock 3. Semaphore 4. Even ...

随机推荐

  1. 016-mac下ps

    参看 http://www.ddooo.com/softdown/65448.htm#dltab 1.下载 安装运行:断网后,双击Photoshop CS6.dmg进入安装界面 2.安装提示:安装程序 ...

  2. 002-创建型-02-抽象工厂模式(Abstract Factory)

    一.概述 抽象工厂模式提供同一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一 ...

  3. win7电脑删除保存的凭据

    win7电脑删除保存的凭据: 控制面板-> 用户账户 -> 管理您的凭据

  4. LeetCode_190. Reverse Bits

    190. Reverse Bits Easy Reverse bits of a given 32 bits unsigned integer. Example 1: Input: 000000101 ...

  5. redis未设置idle超时时间导致连接过多

    今天ELK收集日志的时候,发现收集失败,查找各方面原因,最后在redis日志里面发现报错:[2489] 02 Jun 10:43:42 # Error allocating resoures for ...

  6. 生成count位随机数工具类

    工具类 import java.util.Random; /** * 生成6位随机数字 */ public class GeneratorCode { /** * * @Title: getCode ...

  7. WebGL学习之纹理盒

    原文地址:WebGL学习之纹理盒 我们之前已经学习过二维纹理 gl.TEXTURE_2D,而且还使用它实现了各种效果.但还有一种立方体纹理 gl.TEXTURE_CUBE_MAP,它包含了6个纹理代表 ...

  8. 如何使用CLI命令行部署VMware VCSA 6.5

    在本文中,我们讨论如何使用CLI部署VMware vCSA 6.5,vCSA 6.0提供了两种实现类型,向导和脚本化.我们将使用一个名为vcsa-deploy的实用程序进行CLI安装.同样vcsa-d ...

  9. UIPath工具来取得邮件里面的添付文件及邮件内容

    下图是得到Outlook邮件附件的示意图 下面的图是对UIPath的属性的设定.最重要的是两个文件夹要保持一致.

  10. [转载]oracle xml操作

    /*=====================生成\修改xml========================= */ --xmlelement多个标签层级 SELECT XMLELEMENT(&qu ...