join()方法


  1. from multiprocessing import Process
  2. import time
  3. def func(arg1,arg2):
  4. print('*'*arg1)
  5. time.sleep(5)
  6. print('*'*arg2)
  7. if __name__ == '__main__': #windos必须声明
  8. p = Process(target=func, args=(10,20))
  9. p.start()
  10. print('hahaha')
  11. #需求,要求子进程结束后立即执行主进程
  12. p.join()#join()方法用于感知一个子进程的结束,类似将异步的程序改为同步
  13. print('========:运行完了')
  14. >>>>
  15. hahaha
  16. **********
  17. ********************
  18. ========:运行完了

控制多个子进程, 保证所有子进程结束才执行下面的逻辑

  1. from multiprocessing import Process
  2. import time
  3. def func(arg1,arg2):
  4. print('*'*arg1)
  5. time.sleep(5)
  6. print('*'*arg2)
  7. if __name__ == '__main__': #windos必须声明
  8. p_lst = []
  9. for i in range(10):
  10. p = Process(target=func, args=(10*i,20*i))
  11. p_lst.append(p)
  12. p.start() #子进程还是异步执行
  13. [p.join() for p in p_lst]#join()每个子进程,保证所有的子进程都结束了才执行下面这句
  14. print('运行完了')

异步写入多个文件

  1. import os
  2. from multiprocessing import Process
  3. def func(filename, content):
  4. with open(filename,'w') as f:
  5. f.write(content*10*'*')
  6. if __name__ == '__main__':
  7. p_lst = []
  8. for i in range(5):
  9. p = Process(target=func, args=('info%s'%i,i))
  10. p_lst.append(p)
  11. p.start()
  12. [p.join() for p in p_lst]
  13. print([i for i in os.walk(r'C:\Demo')])

开启子进程的第二种方法

  1. from multiprocessing import Process
  2. import os
  3. class MyProcess(Process): #继承Process,实现一个自定义类
  4. def run(self): #必须实现一个run方法, run方法必须是在子进程中执行的代码
  5. print('子进程',os.getpid())
  6. if __name__ == '__main__':
  7. print('主进程:', os.getpid())
  8. p1 = MyProcess()
  9. p1.start()
  10. p2 = MyProcess()
  11. p2.start()

开启子进程第二种方法-参数的传递

  1. from multiprocessing import Process
  2. import os
  3. class MyProcess(Process): #继承Process,实现一个自定义类
  4. def __init__(self,arg1, arg2): #接收参数
  5. super().__init__()#process本身也有__init__,这里需要继承
  6. self.arg1 = arg1
  7. self.arg2 = arg2
  8. def run(self): #必须实现一个run方法, run方法必须是在子进程中执行的代码
  9. print('子进程',os.getpid())
  10. print(self.arg1)
  11. print(self.arg2)
  12. if __name__ == '__main__':
  13. print('主进程:', os.getpid())
  14. p1 = MyProcess(1,2) #传递参数
  15. p1.start()
  16. p2 = MyProcess(3,4)
  17. p2.start()

Python并发编程-进程的几个方法的更多相关文章

  1. python并发编程-进程理论-进程方法-守护进程-互斥锁-01

    操作系统发展史(主要的几个阶段) 初始系统 1946年第一台计算机诞生,采用手工操作的方式(用穿孔卡片操作) 同一个房间同一时刻只能运行一个程序,效率极低(操作一两个小时,CPU一两秒可能就运算完了) ...

  2. Python(并发编程进程)

    并发编程 二.多进程 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函 ...

  3. Python并发编程-进程

    由于GIL(全局解释锁)的问题,多线程并不能充分利用多核处理器,如果是一个CPU计算型的任务,应该使用多进程模块 multiprocessing .它的工作方式与线程库完全不同,但是两种库的语法和接口 ...

  4. Python并发编程-进程 线程 同步锁 线程死锁和递归锁

    进程是最小的资源单位,线程是最小的执行单位 一.进程 进程:就是一个程序在一个数据集上的一次动态执行过程. 进程由三部分组成: 1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成 2.数据 ...

  5. Python之路【第十六篇】:Python并发编程|进程、线程

    一.进程和线程 进程 假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作), 而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源. 是 ...

  6. python并发编程-进程池线程池-协程-I/O模型-04

    目录 进程池线程池的使用***** 进程池/线程池的创建和提交回调 验证复用池子里的线程或进程 异步回调机制 通过闭包给回调函数添加额外参数(扩展) 协程*** 概念回顾(协程这里再理一下) 如何实现 ...

  7. python 并发编程 进程池与线程池

    一 进程池与线程池 1.为什么需要进程池和线程池 基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是: 服务端的程序运行在一台机器身上,一台机器性能是有极限的,不能无限开线程 服务的 ...

  8. Python并发编程-进程池的返回值

    同步或异步获取返回值 #p = Pool() #p.map(funcname,iterable) 默认异步的执行任务,且自带close,join功能 #p.apply(), 同步调用进程池的方法 #p ...

  9. Python并发编程-进程池及异步方式

    进程池的基本概念 为什么有进程池的概念 效率问题 每次开启进程,都需要开启属于这个进程的内存空间 寄存器,堆栈 进程过多,操作系统的调度 进程池 python中的 先创建一个属于进程的池子 这个池子指 ...

随机推荐

  1. NOIP模拟赛14

    期望得分:0+100+100=200 实际得分:0+100+100=200 T1 [Ahoi2009]fly 飞行棋 http://www.lydsy.com/JudgeOnline/problem. ...

  2. ZOJ 3778 C - Talented Chef 水题

    LINK:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3778 题意:有n道菜,每道菜需要\(a_i\)道工序,有m个锅可 ...

  3. C语言与汇编语言对照分析

    游戏通常会包含各种各样的功能,如战斗系统.UI渲染.经济系统.生产系统等,每个系统又包含各式各样子功能,如伤害判定.施法.使用道具.角色移动.玩家之间交易等等.这些游戏功能在代码实现中往往少不了条件判 ...

  4. HDU 2159 FATE (dp)

    题目链接 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最 ...

  5. HDU 1148 Rock-Paper-Scissors Tournament (模拟)

    题目链接 Problem Description Rock-Paper-Scissors is game for two players, A and B, who each choose, inde ...

  6. 【文件上传】jquery之ajaxfileupload异步上传插件

    来自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336826.html 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用J ...

  7. thinkphp crud实例代码

    class IndexAction extends Action { // 查询数据 public function index() { $Form = M("Form"); $l ...

  8. wget下载整个网站或特定目录

    下载整个网站或特定目录 wget -c -k -r -np -p http://www.yoursite.com/path -c, –continue 断点下载 -k, –convert-links ...

  9. 42、和为S的两个数字

    一.题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 二.解法 import java.util.ArrayLis ...

  10. sqlmap的使用方法 ——时光凉春衫薄

    普通注入 Sqlmap -u “http://www.xxxxxx.com/xxxx/xxx/xxx.xxx?xx=xx” --dbs 找到一个sql的注入点 探测他的库名   access的直接探表 ...