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

【Python】Python多进程练习的更多相关文章

  1. 【python】多进程锁multiprocess.Lock

    [python]多进程锁multiprocess.Lock 2013-09-13 13:48 11613人阅读 评论(2) 收藏 举报  分类: Python(38)  同步的方法基本与多线程相同. ...

  2. Python实现多进程

    Python可以实现多线程,但是因为Global Interpreter Lock (GIL),Python的多线程只能使用一个CPU内核,即一个时间只有一个线程在运行,多线程只是不同线程之间的切换, ...

  3. 『Python』多进程处理

    尝试学习python的多进程模组,对比多线程,大概的区别在: 1.多进程的处理速度更快 2.多进程的各个子进程之间交换数据很不方便 多进程调用方式 进程基本使用multicore() 进程池优化进程的 ...

  4. python 使用多进程实现并发编程/使用queue进行进程间数据交换

    import time import os import multiprocessing from multiprocessing import Queue, pool ""&qu ...

  5. Python多线程多进程

    一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...

  6. python中多进程+协程的使用以及为什么要用它

    前面讲了为什么python里推荐用多进程而不是多线程,但是多进程也有其自己的限制:相比线程更加笨重.切换耗时更长,并且在python的多进程下,进程数量不推荐超过CPU核心数(一个进程只有一个GIL, ...

  7. Python的多进程

    这里不说其它,Python的多进程网上已经有很多了,可以尽情搜索.但是用多进程一般是采用对任务的方式,所以注意文件锁定.一般采用Pool是比较合适的.给个网友的小代码 from multiproces ...

  8. 进程,线程,以及Python的多进程实例

    什么是进程,什么是线程? 进程与线程是包含关系,进程包含了线程. 进程是系统资源分配的最小单元,线程是系统任务执行的最小单元. 打个比方,打开word,word这个程序是一个进程,里面的拼写检查,字数 ...

  9. 进程与线程(2)- python实现多进程

    python 实现多进程 参考链接: https://morvanzhou.github.io/tutorials/python-basic/multiprocessing/ python中实现多进程 ...

  10. Python多线程多进程那些事儿看这篇就够了~~

    自己以前也写过多线程,发现都是零零碎碎,这篇写写详细点,填一下GIL和Python多线程多进程的坑~ 总结下GIL的坑和python多线程多进程分别应用场景(IO密集.计算密集)以及具体实现的代码模块 ...

随机推荐

  1. word生成产生错误的原因

    技术背景 很多时候我们网站或者系统需要提供一些word文件,例如证明.docx或者订单.docx等文件供用户下载打印等. 用Java操作word文档,毫无疑问,当下最流行apache poi,对于po ...

  2. gitlab 已有代码仓库推送到另外一个gitlab仓库

    创建一个新仓库 git clone ssh://git@gitlab.***************.git cd plt-calcium-report-web touch README.md git ...

  3. JAVA笔记_方法递归调用

    方法递归调用   简单地说递归调用就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂问题,同时可以让代码变得更加简洁. 递归调用执行机制案例1: /** * @ClassName ...

  4. 插入排序C语言

    1 #include "stdio.h" 2 #include "stdlib.h" 3 typedef int ElemType; 4 //直接插入排序 5 ...

  5. starlette.routing.NoMatchFound

    目前正在学习FastAPI, 目前是学习到了引入静态文件.这是我引入的本地文件的方式 url_for('/static', path='/imgs/favicon.ico') 只要启动服务,就会报错5 ...

  6. mybatis-plus主键生成策略(实体类配置,数据库插入数据自动生成id)

    转载:MyBatisplus -- ActiveRecord(AR)_mybatisplus idtype.auto_憨憨浩浩的博客-CSDN博客 0.auto:自动增长(mysql,sql serv ...

  7. 修改python下载镜像源

    找到pip.ini(可能在"C:\Users\Administrator\AppData\Roaming\pip\pip.ini")→记事本打开→添加相应源 如果没有找到,在C:\ ...

  8. Error:java: 无效的目标发行版: 9

    今天碰到一个编译问题,起先以为是jdk版本问题,但是查看了下,发现版本没错. 顿时有一种怀疑人生的感觉. 然后网上找了许久,终于让我找到答案: 下面直接上解决方案: 将版本9改为8,保存,测试运行,可 ...

  9. 【笔记】gitlab+openldap使用memberof筛选登录用户

    这几天在搞kerberos+nfs4 没搞成 之前搞了个openldap实现了分散控制集中管理(不是DCS...) gitlab和nexus也支持ldap 虽然都不咋好用 但是在搞gitlab的时候发 ...

  10. 读后笔记 -- Python 全栈测试开发 Chapter9:Postman + Newman 实现接口自动化

    9.1 Postman 工具 9.1.4 Postman 基本操作 1. Get 请求 GET 请求的参数通过 Params 设置,最后出现在 url 地址栏上,拼接在 API 后面.  2. Pos ...