获得进程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)

 

最新文章

  1. Unity性能优化之 Draw Call原理<转>
  2. 遗传算法的C语言实现(二)-----以求解TSP问题为例
  3. <转>VPN技术原理
  4. django with mysql (part-2)
  5. this和super用法的总结
  6. -bash: rz: command not found
  7. 用Navicat for oracle导入现有数据库
  8. iOS学习笔记:iOS核心动画中的常用类型
  9. ym——Android之ListView性能优化
  10. PHP魔术方法
  11. golang项目中使用条件编译
  12. 解决can't connect to redis-server
  13. Ubuntu 16.04下安装MySQL及远程连接
  14. 4.Redis客户端
  15. ThinkJS 开发node后端 使用 简介
  16. Codeforces.468C.Hack it!(构造)
  17. MySQL中的编码问题
  18. 打包maven后出现jar包丢失
  19. Dive into Python
  20. moment.js 常用(几天前、相差几天、自然周、自然月)

热门文章

  1. shell特殊变量,记录一下
  2. Windows的文件类型关联
  3. java虚拟机学习
  4. python中的风险
  5. babel-preset-env使用介绍
  6. MVC 实用构架实战(一)——项目结构搭建
  7. mybatis传入某一列的值,然后设置这一列的值是这个
  8. VS2017上在线和离线安装Qt插件(在线安装)
  9. BouncyCastle 密钥转换 - Java
  10. oracle按照指定列分组合计group by rollup()