1,进程启动

通过Process方法启动,通过下面的代码执行结果,可以发现,开启的进程与WHILE循环语句会同时进行。

为什么呢?因为都是启动了进程在运行程序。

from time import sleep
from multiprocessing import Process def catSound():
while True:
print("喵~~")
sleep(1) if __name__ == '__main__':
createProcess = Process(target=catSound)
createProcess.start()
while True:
print("吱吱~")
sleep(1.2)

2,传递参数

通过kwargs方法,传递参数,注意key值需要与函数中的位置参数一致。

from multiprocessing import Process

def catchMouse(catName, mouseName):
print("%s 抓到了 %s" % (catName, mouseName)) if __name__ == '__main__':
processCatchMouse = Process(target=catchMouse, kwargs={"catName": "Tom", "mouseName": "Jack"})
processCatchMouse.start()

3,进程与进程之间的关系

from time import sleep
from multiprocessing import Process
import os def dogSound():
print("我的编号是: %s" % os.getpid())
sleep(1)
print("汪?") if __name__=='__main__':
print("大狗:我的编号是%s 你的是多少?" % os.getpid())
dogSoundProcess = Process(target=dogSound)
dogSoundProcess.start()
# 加上join后,就会等待子进程执行完毕后再执行父进程,否则会像上面的例子一样并行执行。
dogSoundProcess.join()
print("完毕")

注意:一般进程之间的变量是不会共享的,但是线程会。但是有一些包,提供了进程变量共享的功能。这个后续再练习

4,进程池

使用multiprocessing.pool中的Pool作为池子

通过apply_async方法把进程加入池子中,但是调用join方法前,需要先调用close方法。

import os
import time
from multiprocessing.pool import Pool
import random def childProcess(process_number):
print("进程编号:%d, 当前进程ID: %d" % (process_number, os.getpid()))
startTime = time.time()
time.sleep(random.randrange(5, 10, 2))
endTime = time.time()
print("进程编号:%d, 结束进程ID: %d 睡眠时间: %s" % (process_number, os.getpid(),(endTime-startTime))) if __name__ == '__main__':
print("父进程id: %s" % os.getpid()) processPool = Pool(3) for i in range(9):
processPool.apply_async(func=childProcess, args=(i,)) processPool.close()
processPool.join() print("父进程结束: %d " % (os.getpid()))

5,子进程使用队列向父进程发送消息

from multiprocessing import Process
from multiprocessing import Queue
from time import sleep
import random def smallDog(queue, number):
print("Dog %d sound 汪!" % number)
#向队列中传入数据信息
queue.put("Dog %d have rest" % number) if __name__ == '__main__':
queue = Queue()
for i in range(10):
     # 创建和启动进程,并把新建的队列传入函数中。
processDog = Process(target=smallDog, args=(queue, i))
processDog.start()
# 进程同步
processDog.join() while 1:
if not queue.empty():
# 获取数据信息
print(queue.get())
sleep(1)
else:
print("没有狗了")
sleep(1)
break

本人对join

最新文章

  1. Azure Media Service
  2. 深入浅出Symfony2 - 如何提高网站响应速度 [转]
  3. 如何使用VSTS做压力测试
  4. 手把手教你从 Core Data 迁移到 Realm
  5. 用C#代码控制水晶报表中的对象
  6. HDU 3046 Pleasant sheep and big big wolf(最小割)
  7. JS多语种方式
  8. Hibernate使用原生SQL(转载)
  9. Java简单实现UDP和TCP
  10. Hibernate运行原生sql并将查询的结果转化为对象
  11. php代码画足球场
  12. 21.react 组件通信
  13. Hadoop概念学习系列之Hadoop集群动态增加新节点或删除已有某节点及复制策略导向 (四十三)
  14. c语言中的0UL或1UL是什么意思
  15. 201709012工作日记--activity与service的通信机制
  16. Python小白学习之路(二十二)—【生成器】
  17. Python练习-函数(方法)的定义和应用
  18. ZooKeeper系列文章
  19. 2017 ACM ICPC Asia Regional - Daejeon
  20. phpcms 列表页中调用其下的所有子栏目(或特定的子栏目)的方法

热门文章

  1. vue路由跳转当前路由刷新
  2. 一篇教会你写90%的shell脚本
  3. 宿主机通过vmware创建的kali虚拟机连接redis,sftp等功能
  4. [iOS] iPhone,开发工具的一些杂项
  5. JavaScript&TypeScript学习总结
  6. Cygwin64静默安装办法
  7. linux run/media/wang/centos_磁盘爆满
  8. 解决Google翻译不能用的问题
  9. 2.mysql存储过程、存储函数与触发器
  10. The Nine Arches Bridge