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. 【Web】Struts之namespace

    ZZ:struts2学习:配置篇之namespace 在struts1中是没有命名空间这个概念的,通过命名空间我们可以将所有的action配置划分为一个个逻辑单元,每个单元都有它自己的标识前缀.命名控 ...

  2. NOIP模拟5

    期望得分:100+100+100=300 实际得分:72+12+0=84 T1  [CQOI2009]中位数图 令c[i]表示前i个数中,比d大的数与比d小的数的差,那么如果c[l]=c[r],则[l ...

  3. ASP.NET导入EXCEL方法汇总

    1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) { HttpResponse resp; ...

  4. jquery 事件对象属性小结

    使用事件自然少不了事件对象. 因为不同浏览器之间事件对象的获取, 以及事件对象的属性都有差异, 导致我们很难跨浏览器使用事件对象. jQuery中统一了事件对象, 当绑定事件处理函数时, 会将jQue ...

  5. bzoj3524/2223 [Poi2014]Couriers

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3524 http://www.lydsy.com/JudgeOnline/problem.ph ...

  6. 【BZOJ】1040: [ZJOI2008]骑士 环套树DP

    [题意]给定n个人的ai和bi,表示第i个人能力值为ai且不能和bi同时选择,求能力值和最大的选择方案.n<=10^6. [算法]环套树DP(基环树) [题解]n个点n条边——基环森林(若干环套 ...

  7. js刷题:leecode 25

    原题:https://leetcode.com/problems/reverse-nodes-in-k-group/ 题意就是给你一个有序链表.如1->2->3->4->5,还 ...

  8. MyBatis数据库字段和实体对象属性名不一致的解决方案

    数据库和对象的属性名不一致是很常见的问题,这个时候依从表字段到对象属性名的按名称匹配映射已经搞不定这个了,下面是几种解决方案. 1. 开启驼峰转换 如果数据库中的字段名与对象只是简单的不一致的话,比如 ...

  9. THINKPHP简单商品查询项目

    代码:http://files.cnblogs.com/files/wordblog/test.zip

  10. vs2012 error c4996: 'fopen': This function or variable may be unsafe

    1>------ 已启动生成: 项目: 20130925, 配置: Debug Win32 ------1>  stdafx.cpp1>d:\code\20130925\201309 ...