python进程池 使用Queue实现计数功能
多进程中各个进程间相互隔离,进程间通信需要使用到通道。
多进程中使用Queue实现进程中通信
from multiprocessing import Process,Queue
import time ,random
def f(q, ):
for i in range(10):
n = q.get()
n+=1
q.put( n)
print("计数",n)
print('subpro',id(q))
time.sleep(random.random())
if __name__=='__main__':
q = Queue()
q.put(0)
print('mainpro',id(q))
lst = []
for i in range(3):
p = Process(target=f, args=(q,)) # 必须把q传进去,因为不同进程间内存是不共享的
lst.append(p)
p.start()
for i in lst:
i.join()
print("总数",q.get())
使用进程池时,使用它Queue会出错,需要使用Manager
from multiprocessing import Pool,Manager
import time ,random
def f(q, ):
for i in range(10):
n = q.get()
n+=1
q.put( n)
print("计数",n)
print('subpro',id(q))
time.sleep(random.random())
if __name__=='__main__':
q = Manager().Queue()
q.put(0)
print('mainpro',id(q))
pool = Pool(8)
for x in range(50):
# 添加进程入进程池,注意加"_async",apply为阻塞版本,参数分别为target和args
result = pool.apply_async(f, (q,))
pool.close()
pool.join()
print("总数",q.get())
python进程池 使用Queue实现计数功能的更多相关文章
- python 进程池Pool以及Queue的用法
import os,time,random from multiprocessing import Pool def task(name): print('正在运行的任务:%s,PID:(%s)'%( ...
- python(进程池/线程池)
进程池 import multiprocessing import time def do_calculation(data): print(multiprocessing.current_proce ...
- python进程池剖析(三)
之前文章对python中进程池的原理.数据流以及应用从代码角度做了简单的剖析,现在让我们回头看看标准库中对进程池的实现都有哪些值得我们学习的地方.我们知道,进程池内部由多个线程互相协作,向客户端提供可 ...
- python进程池剖析(一)
python中两个常用来处理进程的模块分别是subprocess和multiprocessing,其中subprocess通常用于执行外部程序,比如一些第三方应用程序,而不是Python程序.如果需要 ...
- python进程池
当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiproce ...
- python进程池与线程池
为什么会进行池化? 一切都是为了效率,每次开启进程都会分配一个属于这个进程独立的内存空间,开启进程过多会占用大量内存,系统调度也会很慢,我们不能无限的开启进程. 进程池原来大概如下图 假设有100个任 ...
- python 进程(池)、线程(池)
进程.多进程.进程池 进程总概述 进程 from multiprocessing import Process import os # 子进程要执行的代码 def run_proc(name): pr ...
- python进程池:multiprocessing.pool
本文转至http://www.cnblogs.com/kaituorensheng/p/4465768.html,在其基础上进行了一些小小改动. 在利用Python进行系统管理的时候,特别是同时操作多 ...
- python进程池剖析(二)
之前文章中介绍了python中multiprocessing模块中自带的进程池Pool,并对进程池中的数据结构和各个线程之间的合作关系进行了简单分析,这节来看下客户端如何对向进程池分配任务,并获取结果 ...
随机推荐
- [Python自学] day-22 (1) (Session、CSRF、中间件)
一.响应函数补充 三种返回响应的方式: return HttpResponse() return render() return redirect() HttpResponse: 除了能够返回字符串, ...
- Oracle 11g关闭用户连接审计
sys.aud$表数据量增长较快.这时,不想关闭数据库的审计,但是又不想频繁的清理sys.aud$表.可进行如下操作关闭数据库连接的审计 noaudit connect;
- nc命令用法举
什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可以作为server ...
- 【概率论】3-4:二维分布(Bivariate Distribution)
title: [概率论]3-4:二维分布(Bivariate Distribution) categories: Mathematic Probability keywords: Discrete J ...
- thinphp5.1 使用redis作为缓存
tp自带的cache类支持redis方式.但是 只有string类型.显然不符合我们的日常的业务需求. so.通过查看源码,发现 handler方法.代码见下图 所以, 这样就能用hash list等 ...
- Linux监控工具介绍系列——iostat
文章转自:https://www.cnblogs.com/ghj1976/p/5691857.html Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iost ...
- bash基础之三配置文件
一.shell的两种登录方式: 1.交互式登录:(1)直接通过终端输入账号密码登录(2)使用“su - UserName” 或“su -l Username”切换的用户执行顺序:/etc/profil ...
- java并发编程--第一章并发编程的挑战
一.java并发编程的挑战 并发编程需要注意的问题: 并发编程的目的是让程序运行的更快,然而并不是启动更多的线程就能让程序最大限度的并发执行.若希望通过多线程并发让程序执行的更快,会受到如下问题的挑战 ...
- Linux发行版的选择
1,需要稳定的服务器,选择CentOS 或 RHEL 2,需要自己定制的桌面系统,选择Ubuntu 3,摸索linux 各方面的知识,选择Gentoo 4,需要稳定性高的系统,选择FreeBSD 5, ...
- 001-多线程-JUC集合-框架概述
一.概述 1.1.java集合 java集合的架构,主体内容包括Collection集合和Map类:而Collection集合又可以划分为List(队列)和Set(集合). 1. List的实现类主要 ...