python之进程(池)
获得进程id
import os
from multiprocessing import Process def info(title):
print(title)
print('模块名:',__name__)
print('父进程:',os.getppid())
print("进程号:",os.getpid())
print("\n\n") def f(name):
info('\033[31;1mfunction f\033[0m')#[yuanlai ]
print('hello',name) if __name__=='__main__':
info('\033[32;1mmain process line\033[0m')
p=Process(target=f,args=('bob',))
p.start()
p.join() 进程同步
from multiprocessing import Process,Lock def f(l,i):
l.acquire()
try:
print('hello world',i)
finally:
l.release() if __name__=='__main__':
lock=Lock() for num in range(10):
Process(target=f,args=(lock,num)).start() 进程通信
#Queues通信
from multiprocessing import Process,Queue def f(q):
q.put([42,None,'hello']) if __name__ == '__main__':
q=Queue()
p=Process(target=f,args=(q,))
p.start()
print(q.get())
p.join() #Pipes通信
from multiprocessing import Process, Pipe def f(conn):
conn.send([42,12,'123nxiu'])
conn.close() if __name__=='__main__':
parent_conn,child__conn=Pipe()
p=Process(target=f,args=(child__conn,))
p.start()
print(parent_conn.recv())
p.join() 进程池
# 进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,
# 如果进程池序列中没有可供使用的进进程,那么程序就会等待,
# 直到进程池中有可用进程为止。
#
# 进程池中有两个方法:
# apply同步(串行)
# apply_async异步(并行)
from multiprocessing import Pool,Process,freeze_support
import time,os def Foo(i):
time.sleep(2)
print("in process",os.getpid())
return i+100 def Bar(arg):
print('-->exec done:',arg,os.getpid()) if __name__=='__main__':#windows上启动多进程,必须以这个开头
freeze_support()
pool=Pool(processes=5)#允许进程池同时放入5个进程,放在进程池里的进程才会运行
print("主进程",os.getpid())
for i in range(10):
pool.apply_async(func=Foo,args=(i,),callback=Bar)#callback回调,执行完Foo之后,主进程再执行回调Bar
#pool.apply(func=Foo,args=(i,))#往进程池中放10个进程 print('end')
pool.close()
pool.join()#进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。
Manager
from multiprocessing import Process,Manager
import os def f(d, l):#字典,列表
d[1] = '1'
d['2'] = 2
d[0.25] = None
l.append (os.getpid())
print(l) if __name__ == '__main__':
with Manager() as manager:
d=manager.dict()#生成一个字典,可在多个进程间共享和传递
l=manager.list(range(5))#生成一个列表,可在多个进程间共享和传递
p_list=[] for i in range(10):
p=Process(target=f,args=(d,l))#生成10个进程
p.start()
p_list.append(p)
for res in p_list:#等待结果
res.join() # if __name__ == '__main__':
# with Manager () as manager:
# d = manager.dict ()
#
# l = manager.list (range (5))
# p_list = []
# for i in range (10):
# p = Process (target=f, args=(d, l))
# p.start ()
# p_list.append (p)
# for res in p_list:
# res.join () print(d)
print(l)
python之进程(池)的更多相关文章
- python之进程池与线程池
一.进程池与线程池介绍 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 当并发的任务数远远超过了计算机的承受能力时,即无法一次性开启过多的进程数或线程数时就应该 ...
- python中进程池的应用
#原创,转载请联系 假设我们写的一个程序需要运行100个子进程的时候,那么写程序时,不可能循环创建销毁100个进程吧?进程的创建与销毁是很耗系统的资源的. 进程池的作用就体现出来了. 进程池可以控制进 ...
- Python 37 进程池与线程池 、 协程
一:进程池与线程池 提交任务的两种方式: 1.同步调用:提交完一个任务之后,就在原地等待,等任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行 2.异步调用:提交完一个任务之后, ...
- python 36 进程池、线程池
目录 1. 死锁与递归锁 2. 信号量Semaphor 3. GIL全局解释器锁:(Cpython) 4. IO.计算密集型对比 4.1 计算密集型: 4.2 IO密集型 5. GIL与Lock锁的区 ...
- python中进程池和回调函数
一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实 ...
- python使用进程池多进程时,如何打印错误信息
一.说明 1.python进程池进行多进程运行时,如果有错误,该进程会直接跳过,并且不会打印错误信息. 2.如果需要了解到进程内的错误信息,此时就需要通过捕获异常来输出错误信息了. 二.具体方法如下: ...
- Python 多进程进程池Queue进程通信
from multiprocessing import Pool,Manager import time def hanshu(queue,a): n = 1 while n<50: # pri ...
- python 使用进程池Pool进行并发编程
进程池Pool 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到mu ...
- day12学python 多进程+进程池
多进程+进程池 多进程(不同进程不可直接访问数据) 引入(多进程套线程) 多进程 需导入multiprocessing模块 模板示例1 import threading,time,multiproce ...
- Python多进程-进程池
进程池可以减轻多进程对CPU的负担 把一个进程序列放入进程池,使用的时候,就会在进程池中取进程如果进程池中没有进程了,脚本就会等待,直到进程池中有可用进程 进程池生成的子线程,不能直接运行,要放入进程 ...
随机推荐
- CentOS 7.4下使用yum安装MySQL5.7.20 最简单的 (引用)
引用 https://blog.csdn.net/z13615480737/article/details/78906598 CentOS7默认数据库是mariadb, 但是 好多用的都是mysql ...
- .NET Core开发日志——依赖注入
依赖注入(DI)不是一个新的话题,它的出现是伴随着系统解耦的需要而几乎必然产生的. 在SOLID设计原则中,DIP(Dependency inversion principle)--依赖倒置,规定了& ...
- html笔记篇-Sublime、Markdown
1.sublime优点:跨平台(Linux,Windows和Mac OS X). 体积小运行速度快. 支持编译功能 .支持大量的插件 2.sublime快速生成html文档: !+tab键 ...
- 量子杨-Baxter方程新解系的一般量子偶构造_爱学术 https://www.ixueshu.com/document/f3385115a33571aa318947a18e7f9386.html
量子杨-Baxter方程新解系的一般量子偶构造_爱学术 https://www.ixueshu.com/document/f3385115a33571aa318947a18e7f9386.html
- PHP之PSR
PHP的PSR (PSR 称为PHP Standard Recommendations) PSR参考网址:http://www.php-fig.org/psr 在PHP中,有5个编码标准分类: ①.P ...
- [development][dpdk][hugepage] 大页内存的挂载
参考: [development][dpdk][hugepage] 为不同的结点分配不同大小的大页内存 完成了以上内容之后, 下一步需要做的是挂载, 大页内存只有被挂载了之后,才能被应用程序使用. 挂 ...
- Java中包装类型和基本类型的使用场景(什么时候使用包装类型)(转)
说明:最简单的理解,基本类型有默认值,而包装类型初始为null.然后再根据这两个特性进行分业务使用,在阿里巴巴的规范里所有的POJO类必须使用包装类型,而在本地变量推荐使用基本类型. Java语言提供 ...
- MySQL加锁处理分析(转)
add by zhj: 非常棒的一篇文章,是我见过的讲加锁最棒最详细的文章了.之前听过网易的<MySQL微专业>,里面的课程讲的也很好,但锁这块讲的跟 这篇文章相比,还是有差距的.网易&l ...
- 获取连接的用户ip
public static string GetUserIP() { string result = String.Empty; result = HttpContext.Current.Reques ...
- 编写第一个H5页面
<!DOCTYPE html><html ><head> <meta charset="UTF-8"> <title>第 ...