上面就是预留了 一个cpu 干其他事的
后面直接使用 Queue 遇到这个问题:
解决:
Manager().Queue()代替 Queue()
因为 queue.get() 是堵塞型的,所以可以提前判断是不是 空的,以免堵塞进程 。比如下面这样:
使用 queue.empty()空为True
python进程和线程中的join方法python中创建进程的方式
一、Process(target=函数名,args=() , name,kwargs)
target:加进程调用的函数名,一般不加括号
name:进程的名字
kwargs:字典参数
args:元组参数,如果参数就一个,记得加逗号’,’
Python多线程与多进程中join()方法的效果是相同的
join所完成的工作就是线程同步,即主线程任务结束之后 , 进入阻塞状态,一直等待其他的子线程执行结束之后,主线程再终止
import threading
import time
python 怎么启动一个外部命令程序,并且不阻塞当前进程1、说明:
python中使用os模块的os.startfile函数就可以实现启动外部命令 , 并且不阻塞当前的进程 。
2、示例:
import os
os.startfile('notepad.exe')
print('我继续执行了,并没有阻塞')
3、执行结果
4、函数说明:
startfile(...)
startfile(filepath [, operation])
打开与它的相关联的应用程序的文件 。
startfile只要相关联的应用程序启动返回 。
没有选择等待应用程序关闭了,没办法检索应用程序的退出状态 。
该文件路径是相对于当前目录 。如果你想使用绝对路径 , 确保第一个字符不是斜线(“/”); 如果是基础Win32 ShellExecute函数不起作用 。
python怎么实现一个进程想要充分利用多核CPU资源,Python中大部分情况下都需要使用多进程,Python中提供了multiprocessing这个包实现多进程 。multiprocessing支持子进程、进程间的同步与通信,提供了Process、Queue、Pipe、Lock等组件 。
开辟子进程
multiprocessing中提供了Process类来生成进程实例
Process([group [, target [, name [, args [, kwargs]]]]])1
group分组 , 实际上不使用
target表示调用对象 , 你可以传入方法的名字
args表示给调用对象以元组的形式提供参数,比如target是函数a,他有两个参数m,n,那么该参数为args=(m, n)即可
kwargs表示调用对象的字典
name是别名,相当于给这个进程取一个名字
先来个小例子:
# -*- coding:utf-8 -*-from multiprocessing import Process, Poolimport osimport timedef run_proc(wTime):
n = 0
while n3:print "subProcess %s run," % os.getpid(), "{0}".format(time.ctime())#获取当前进程号和正在运行是的时间
time.sleep(wTime)#等待(休眠)
n += 1if __name__ == "__main__":
p = Process(target=run_proc, args=(2,))#申请子进程
p.start()#运行进程
print "Parent process run. subProcess is ", p.pidprint "Parent process end,{0}".format(time.ctime())12345678910111213141516171819
运行结果:
Parent process run. subProcess is 30196
Parent process end,Mon Mar 27 11:20:21 2017
subProcess 30196 run, Mon Mar 27 11:20:21 2017
subProcess 30196 run, Mon Mar 27 11:20:23 2017
subProcess 30196 run, Mon Mar 27 11:20:25 2017
根据运行结果可知 , 父进程运行结束后子进程仍然还在运行 , 这可能造成僵尸( zombie)进程 。
通常情况下 , 当子进程终结时,它会通知父进程,清空自己所占据的内存,并在内核里留下自己的退出信息 。父进程在得知子进程终结时,会从内核中取出子进程的退出信息 。但是,如果父进程早于子进程终结,这可能造成子进程的退出信息滞留在内核中,子进程成为僵尸(zombie)进程 。当大量僵尸进程积累时 , 内存空间会被挤占 。
推荐阅读
- 咖啡直播禁忌话术,咖啡直播禁忌话术是什么
- 平板电脑好还是安卓平板好,平板是ipad好还是安卓
- 工业风格的电视墙怎么装修,工业风电视背景墙效果图
- thinkphp绑定微信,thinkphp安装连接php
- c语言函数实验报告 C语言函数实验报告总结
- linux倒退命令,linux怎么后退命令
- 电脑密码怎么用u盘修改,u盘改电脑开机密码
- idea怎么mysql Idea怎么打开别人的项目
- gis填挖计算,gis挖空