一、多进程

1、进程模块 multiprocessing

简单的创建一个进程

#!/usr/bin/env python
# -*- coding: utf- -*-
# @Author : Willpower-chen from multiprocessing import Process
def run(name):
print('my name is %s'% name)
if __name__ == '__main__':
p = Process(target=run,args=('lilei',))#创建一个进程实例
p.start()

2、进程号获取,父子进程关系

from multiprocessing import Process
import os def info(title): #info 函数打印父子进程
print(title)
print('module name:',__name__)
print('parent process name:',os.getppid())#打印父进程
print('child process name:',os.getpid())#打印子进程 def f(name):
info('\033[31;1m called from child process function f \033[0m')#打印f函数的父子进程
print('hello ',name) if __name__ == '__main__':
info('\033[32;1m main process \033[0m') #主程序调用info函数打印父子进程
p = Process(target=f,args=('hanmeimei',)) #主程序启动一个子进程,打印子进程的父子函数
p.start()
p.join()
第一次
main process
module name: __main__
parent process name:
child process name: called from child process function f
module name: __mp_main__
parent process name:
child process name:
hello hanmeimei 第二次
main process
module name: __main__
parent process name:
child process name: called from child process function f
module name: __mp_main__
parent process name:
child process name:
hello hanmeimei 第三次
main process
module name: __main__
parent process name:
child process name:
called from child process function f
module name: __mp_main__
parent process name:
child process name:
hello hanmeimei

结果

结论:pycharm程序运行的父进程是win7任务栏里的pycharm进程号,每一个进程都会有一个父进程。父进程os.getppid(),子进程os.getpid()

3、进程间通信Queue,pipe

(1)Queue

from multiprocessing import Queue,Process

def f(cq):
print('in child before cq.put:',cq.qsize()) #子进程put前查看队列中是否有数据
cq.put(['my','name','is',['lilei','xixi']]) #往队列中添加一个元素 if __name__ == '__main__':
mq = Queue() #定义进程队列实例
mq.put('fome main') #往队列中添加一个元素
p = Process(target=f,args=(mq,))#创建一个子进程,并将mq传给子进程
p.start() #启动
p.join() #等待子进程执行完毕
print('',mq.get_nowait())#获取队列元素
print('',mq.get_nowait())

Queue

in child before cq.put:
fome main
['my', 'name', 'is', ['lilei', 'xixi']]

结果

(2)pipe

from multiprocessing import  Process,Pipe

def f(conn):
conn.send("from child1") #发送数据
conn.send("from child2") #发送数据
print('client recv:',conn.recv())#接收数据
conn.close() if __name__ == '__main__':
a_conn, b_conn = Pipe() #创建管道
p = Process(target=f,args=(b_conn,)) #实例化子进程,函数f,参数管道的一端
p.start()
print(a_conn.recv())
print(a_conn.recv())
a_conn.send('from parent') #父进程发送数据
p.join()

Pipe

3、进程间数据共享manager

from multiprocessing import Process,Manager
import os
def run(d,l):
d[os.getpid()] = os.getpid() #以当前子进程的pid为key,同时pid也作为value
l.append(os.getpid())
print(d,l) if __name__ == '__main__':
with Manager() as manager:
d = manager.dict() #manager 字典
l = manager.list() #manager 列表
p_list = [] #空的列表,为之后的添加进程实例
for i in range(): #启动多个子进程
p = Process(target=run,args=(d,l))#起一子进程,执行run参数d,l
p.start()
p_list.append(p) #添加进程实例至列表
for r in p_list: #循环子进程
r.join() #等待子进程结束
print(d) #打印最终的字典
print(l) #打印最终的列表
{: } []
{: , : } [, ]
{: , : , : } [, , ]
{: , : , : , : } [, , , ]
{: , : , : , : , : } [, , , , ]
{: , : , : , : , : , : } [, , , , , ]
{: , : , : , : , : , : , : } [, , , , , , ]
{: , : , : , : , : , : , : , : } [, , , , , , , ]
{: , : , : , : , : , : , : , : , : } [, , , , , , , , ]
{: , : , : , : , : , : , : , : , : , : } [, , , , , , , , , ]
{: , : , : , : , : , : , : , : , : , : }
[, , , , , , , , , ]

结果

python运维开发之第十天的更多相关文章

  1. Python运维开发基础09-函数基础【转】

    上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...

  2. Python运维开发基础10-函数基础【转】

    一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...

  3. Python运维开发基础08-文件基础【转】

    一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...

  4. Python运维开发基础07-文件基础【转】

    一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...

  5. Python运维开发基础06-语法基础【转】

    上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...

  6. Python运维开发基础05-语法基础【转】

    上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...

  7. Python运维开发基础04-语法基础【转】

    上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...

  8. Python运维开发基础03-语法基础 【转】

    上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...

  9. Python运维开发基础02-语法基础【转】

    上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...

随机推荐

  1. Android 屏幕截图

    1.同时按下电源键+音量下键截屏 PhoneWindowManager.java private void interceptScreenshotChord() { if (mScreenshotCh ...

  2. 工作中常用的QTP操作Excel函数

    前言 本文只是对工作中常用的EOM相关函数的整理,并不是要写个大而全的操作手册,如果想对EOM有更多的了解可以参考QTP的帮助文档或查看QTP安装目录\CodeSamplesPlus\UsingExc ...

  3. 重载(Overloading)以及模板(Template)

    继续<C++ premier plus>的学习 (1)函数重载,通俗来说,就是相同的函数名字名下,存在多个函数,要使得这成立,各个同名函数必须形参列表(也称为"签名", ...

  4. [Javascript] Promise

    Promise 代表着一个异步操作,这个异步操作现在尚未完成,但在将来某刻会被完成. Promise 有三种状态 pending : 初始的状态,尚未知道结果 fulfilled : 代表操作成功 r ...

  5. javascript中错误使用var造成undefined

    在javascript中依据变量作用的范围不同分为局部变量和全局变量,直接定义的变量是全局变量,全局变量能够被全部的脚本訪问:在函数中定义的变量是局部变量,局部变量仅仅在函数内有效. 假设全局变量和局 ...

  6. Web日程管理FullCalendar

    fullcalendar是一款jQuery日程管理控件,提供了丰富的属性设置和方法调用,官网下载地址http://fullcalendar.io/download,眼下最新版本号是2.3.2. 仅仅要 ...

  7. Undefined symbols for architecture i386

    这个错误的发生原因一般是“XXX”这个文件(类库)虽然引入了工程中,但是由于种种原因(常见于多人开发,svn同步不规范)导致“XXX”并未被添加到project.pbxproj这个文件中. 解决方法是 ...

  8. [转] 学习HTML/JavaScript/PHP 三者的关系以及各自的作用

    1.What is HTML? When you write a normal document using a word processor like Microsoft Word/Office, ...

  9. Java基础知识强化之IO流笔记11:递归之递归概述和注意事项

    1. 递归: 方法定义中调用方法本身的现象. e.g: public void show(int n ) { if(n <= 0) { System.exit(0); } System.out. ...

  10. TCO 2015 Round 1B DIV1 500 概率题

    [题意]现在有一些线索,每个线索被发现的概率p[i],如果线索i被知道,那么其他线索也可能会被知道,用vector<string> c给出,c[i][j]='Y'表示知道i这个线索,j这个 ...