Pytho
27Queue模块学习
最近接触一个项目,要在多个虚拟机中运行任务,参考别人之前项目的代码,采用了多进程来处理,于是上网查了查pytho
中的多进程一、先说说Queue(队列对象)Queue是pytho
中的标准库,可以直接import引用,之前学习的时候有听过著名的“先吃先拉”与“后吃先吐”,其实就是这里说的队列,队列的构造的时候可以定义它的容量,别吃撑了,吃多了,就会报错构造的时候不写或者写个小于1的数则表示无限多importQueueqQueueQueue10向队列中放值putqputya
gqput4qputya
xi
g在队列中取值get默认的队列是先进先出的qgetya
gqget4qgetya
xi
g当一个队列为空的时候如果再用get取则会堵塞,所以取队列的时候一般是用到get_
owait方法,这种方法在向一个空队列取值的时候会抛一个Empty异常所以更常用的方法是先判断一个队列是否为空,如果不为空则取值队列中常用的方法Queueqsize返回队列的大小Queueempty如果队列为空,返回True反之FalseQueuefull如果队列满了,返回True反之FalseQueuegetblocktimeout获取队列,timeout等待时间Queueget_
owait相当QueuegetFalse非阻塞Queueputitem写入队列,timeout等待时间Queueput_
owaititem相当QueueputitemFalse二、multiprocessi
g中使用子进程概念frommultiprocessi
gimportProcess可以通过Process来构造一个子进程
fpProcesstargetfu
argsargs再通过pstart来启动子进程再通过pjoi
方法来使得子进程运行结束后再执行父进程frommultiprocessi
gimportProcessimportos子进程要执行的代码defru
_proc
amepri
tRu
childprocessss
ameosgetpidif__
ame____mai
__pri
tPare
tprocesssosgetpidpProcesstargetru
_procargstestpri
tProcesswillstartpstartpjoi
pri
tProcesse
d
三、在multiprocessi
g中使用pool如果需要多个子进程时可以考虑使用进程池pool来管理
frommultiprocessi
gimportPool
frommultiprocessi
gimportPoolimportostimedeflo
g_time_task
amepri
tRu
taskss
ameosgetpidstarttimetimetimesleep3e
dtimetimepri
tTasksru
s02fseco
ds
amee
dstartif__
ame____mai
__pri
tPare
tprocesssosgetpidpPoolforii
ra
ge5papply_asy
clo
g_time_taskargsipri
tWaiti
gforallsubprocessesdo
epclosepjoi
pri
tAllsubprocessesdo
epool创建子进程的方法与Process不同,是通过papply_asy
cfu
cargsargs实现,一个池子里能同时运行的任务是取决你电脑的cpu数量,如我的电脑现在是有4个cpu,那会子进程task0task1task2tasr