获得进程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之进程(池)的更多相关文章

  1. python之进程池与线程池

    一.进程池与线程池介绍 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 当并发的任务数远远超过了计算机的承受能力时,即无法一次性开启过多的进程数或线程数时就应该 ...

  2. python中进程池的应用

    #原创,转载请联系 假设我们写的一个程序需要运行100个子进程的时候,那么写程序时,不可能循环创建销毁100个进程吧?进程的创建与销毁是很耗系统的资源的. 进程池的作用就体现出来了. 进程池可以控制进 ...

  3. Python 37 进程池与线程池 、 协程

    一:进程池与线程池 提交任务的两种方式: 1.同步调用:提交完一个任务之后,就在原地等待,等任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行 2.异步调用:提交完一个任务之后, ...

  4. python 36 进程池、线程池

    目录 1. 死锁与递归锁 2. 信号量Semaphor 3. GIL全局解释器锁:(Cpython) 4. IO.计算密集型对比 4.1 计算密集型: 4.2 IO密集型 5. GIL与Lock锁的区 ...

  5. python中进程池和回调函数

    一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实 ...

  6. python使用进程池多进程时,如何打印错误信息

    一.说明 1.python进程池进行多进程运行时,如果有错误,该进程会直接跳过,并且不会打印错误信息. 2.如果需要了解到进程内的错误信息,此时就需要通过捕获异常来输出错误信息了. 二.具体方法如下: ...

  7. Python 多进程进程池Queue进程通信

    from multiprocessing import Pool,Manager import time def hanshu(queue,a): n = 1 while n<50: # pri ...

  8. python 使用进程池Pool进行并发编程

    进程池Pool 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到mu ...

  9. day12学python 多进程+进程池

    多进程+进程池 多进程(不同进程不可直接访问数据) 引入(多进程套线程) 多进程 需导入multiprocessing模块 模板示例1 import threading,time,multiproce ...

  10. Python多进程-进程池

    进程池可以减轻多进程对CPU的负担 把一个进程序列放入进程池,使用的时候,就会在进程池中取进程如果进程池中没有进程了,脚本就会等待,直到进程池中有可用进程 进程池生成的子线程,不能直接运行,要放入进程 ...

随机推荐

  1. 7.26-STOIRegularMatch-08-#14

    A-3 SRM 08 描述 给一个 01 串设为其 S,询问是否存在只出现两次的 01 串 T. 这里的出现定义为存在一串下标 ,满足  且 . 输入格式 一行,一个 01 串 输出格式 一行,字母 ...

  2. Exception 07 : org.hibernate.LazyInitializationException: could not initialize proxy - no Session

    异常名称: org.hibernate.LazyInitializationException: could not initialize proxy - no Session 异常截图: 异常详情: ...

  3. LITTLE-ENDIAN(小字节序、低字节序) BOM——Byte Order Mark 字节序标记 数据在内存中的存放顺序

    总结: 1. endian 字节存放次序 字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了). 2. LITTLE-ENDIA ...

  4. browse-agent type and curl post

    https://www.jb51.net/web/499127.html http://www.atool.org/useragent.php  query for type 用Curl测试POST ...

  5. [development][libhtp] libhtp 启用debug模式

    可以使用 ./configure --help 查看帮助. 可以通过参数, 修改配置. 即对应的Makefile内容. 也可以修改 configure.ac 里的内容, help中的部分内容, 也依赖 ...

  6. MyEvent.SetEvent; // 同步信号置位

    MyEvent.SetEvent;   //  同步信号置位 TSimpleEvent.Create = TEvent.Create(nil, True, False, nil)           ...

  7. 内部排序->插入排序->其它插入排序->2-路插入排序

    文字描述 在折半插入排序的基础上进行改进, 另设一个和待排序序列L相同的数组D, 首先将L[1]赋值给D[0], 数组D中数据是已经排好序的, first指向最小值下标,final指向最大值下标.初始 ...

  8. 自动化测试:java + testng + maven + reportng + jenkins + selenium (一)_基于win环境

    集成环境:jdk1.7 + tomcat1.7+ eclipse mars + maven + testng6.14.2 + selenium-java2.40.0 + reportng1.1.4 + ...

  9. swift 字体自适应,宽高自适应

    let kScreenWidth = UIScreen.main.bounds.width let kScreenHeight = UIScreen.main.bounds.height public ...

  10. VS Code 管理 .NET Core解决方案

    本练习要使用Visual studio code完成一个包含多个项目的解决方案,包括类库和Web项目.结合Visual Studio Code和.NET Core CLI,创建项目结构如下: pied ...