join()方法


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

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

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

异步写入多个文件

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

开启子进程的第二种方法

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

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

from multiprocessing import  Process
import os class MyProcess(Process): #继承Process,实现一个自定义类
def __init__(self,arg1, arg2): #接收参数
super().__init__()#process本身也有__init__,这里需要继承
self.arg1 = arg1
self.arg2 = arg2 def run(self): #必须实现一个run方法, run方法必须是在子进程中执行的代码
print('子进程',os.getpid())
print(self.arg1)
print(self.arg2) if __name__ == '__main__':
print('主进程:', os.getpid())
p1 = MyProcess(1,2) #传递参数
p1.start()
p2 = MyProcess(3,4)
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. horizon源码分析(一)

    源码版本:H版 一.写在前面 本来应该搭建horizon的development环境的,这样方便debug,但是由于各种报错,本人没有搭建成功,这也导致有很多源码疑问没有解决,后续可以继续补充这一部分 ...

  2. $.extend()与$.fn.extend()

    jQuery.extend(object) 扩展jQuery对象本身.用来在jQuery命名空间上增加新函数.jQuery.fn.extend(object) 扩展 jQuery 元素集来提供新的方法 ...

  3. DOM操作二三事

    我突然想起了append(),但是我记不太清它是原生JS的还是jQuery封装的,貌似是JS的,咦?那它在jQuery里叫什么来着?哎呀!记不清了!确定append()是JS里的?不是jQuery里的 ...

  4. 前端开发必知必会:CSS Position 全解析

    此文根据Steven Bradley的<How Well Do You Understand CSS Positioning?>所译,整个译文带有我自己的理解与思想,如果译得不好或不对之处 ...

  5. 持续集成工具Jenkins安装、部署、使用

    本文介绍jenkins,利用其做项目发布与持续集成交付工具. 一.Jenkins是什么? Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布 ...

  6. Laravel 5.4 migrate时报错: Specified key was too long error

    Laravel 5.4默认使用utf8mb4字符编码,而不是之前的utf8编码.因此运行php artisan migrate 会出现如下错误: [Illuminate\Database\QueryE ...

  7. 【leetcode 简单】 第五十一题 有效电话号码

    给定一个包含电话号码列表(一行一个电话号码)的文本文件 file.txt,写一个 bash 脚本输出所有有效的电话号码. 你可以假设一个有效的电话号码必须满足以下两种格式: (xxx) xxx-xxx ...

  8. 33、re的match和search区别?

    1.match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配:2.也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功 ...

  9. CMDB概述(一)

    浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...

  10. Django之动态验证码的生成

    kind.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...