Python多进程用到的方法

join():上面的代码执行完毕之后,才会执行后面的代码。 先看一个例子:

from multiprocessing import Process
import time,os,random
def func(name,hour):
    print("A lifelong friend:%s,%s"% (name,os.getpid()))
    time.sleep(hour)
    print("Good bother:%s"%name)

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',2))
    p1 = Process(target=func,args=('maoxian',1))
    p2 = Process(target=func,args=('xiaoniao',3))
    p.start()
    p1.start()
    p2.start()
    print("this is over")

执行结果:
this is over   #最后执行,最先打印,说明start()只是开启进程,并不是说一定要执行完
A lifelong friend:kebi,12048
A lifelong friend:maoxian,8252
A lifelong friend:xiaoniao,6068
Good bother:maoxian   #最先打印,第二位执行
Good bother:kebi     
Good bother:xiaoniao

添加join():

from multiprocessing import Process
import time,os,random
def func(name,hour):
    print("A lifelong friend:%s,%s"% (name,os.getpid()))
    time.sleep(hour)
    print("Good bother:%s"%name)
start = time.time()
if __name__ == "__main__":
    p = Process(target=func,args=('kebi',2))
    p1 = Process(target=func,args=('maoxian',1))
    p2 = Process(target=func,args=('xiaoniao',3))
    p.start()
    p.join()   #上面的代码执行完毕之后,再执行后面的
    p1.start()
    p1.join()
    p2.start()
    p2.join()
    print("this is over")
    print(time.time() - start)

#执行结果
A lifelong friend:kebi,14804
Good bother:kebi
A lifelong friend:maoxian,11120
Good bother:maoxian
A lifelong friend:xiaoniao,10252  #每个进程执行完了,才会执行下一个
Good bother:xiaoniao
this is over
6.497815370559692   #2+1+3+主程序执行时间

改变一下位置

from multiprocessing import Process
import time,os,random
def func(name,hour):
    print("A lifelong friend:%s,%s"% (name,os.getpid()))
    time.sleep(hour)
    print("Good bother:%s"%name)
start = time.time()
if __name__ == "__main__":
    p = Process(target=func,args=('kebi',2))
    p1 = Process(target=func,args=('maoxian',1))
    p2 = Process(target=func,args=('xiaoniao',3))
    p.start()
    p1.start()
    p2.start()
    p.join()   #需要2秒
    p1.join()  #到这时已经执行完
    p2.join()   #已经执行了2秒,还要1秒
    print("this is over")
    print(time.time() - start)

#执行结果

A lifelong friend:kebi,13520
A lifelong friend:maoxian,11612
A lifelong friend:xiaoniao,17064  #几乎是同时开启执行
Good bother:maoxian
Good bother:kebi
Good bother:xiaoniao
this is over
3.273620367050171  #以最长时间的为主

terminate() :

from multiprocessing import Process
import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.start()
    p.terminate()  #将进程杀死,而且必须放在start()后面,与daemon的功能类似

#执行结果
this is over

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Django中文社区

自动生成文章摘要

博客文章的模型有一个 excerpt 字段,这个字段用于存储文章的摘要。目前为止,还只能在 Django Admin 后台手动为文章输入摘要。每次手动输入摘要比...

64880
来自专栏Django中文社区

基于类的通用视图:ListView 和 DetailView

在开发网站的过程中,有一些视图函数虽然处理的对象不同,但是其大致的代码逻辑是一样的。比如一个博客和一个论坛,通常其首页都是展示一系列的文章列表或者帖子列表。对处...

35670
来自专栏Django中文社区

拓展 User 模型

Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息。对于 Django 内置的 User 模型, 仅包含以下一些主...

37950
来自专栏Django中文社区

自定义认证后台

Django auth 应用默认支持用户名(username)进行登录。但是在实践中,网站可能还需要邮箱、手机号、身份证号等进行登录,这就需要我们自己写一个认证...

27780
来自专栏Crossin的编程教室

Python 中的 time 模块

写代码时,常常会遇到处理时间和日期的问题。在 Python 中,与时间处理最相关的模块是 time 和 datetime。今天我们介绍下 time 模块的常用功...

37280
来自专栏Django中文社区

基本设置

网站提供登录、注册等用户认证功能是一个常见的需求。因此,Django 提供了一套功能完整的、灵活的、易于拓展的用户认证系统:django.contrib.aut...

286100
来自专栏Crossin的编程教室

10个对Web开发者最有用的Python包

Python最近成为了开发人员最喜欢的语言之一。无论你是专业的,业余的,还是一个初学者,你都可以从Python语言及其程序包中受益。Python已经被证明是当今...

34470
来自专栏运维技术迷

连仕彤博客[Python笔记] IPython使用技巧

帮助 ?:IPython的概述和简介   In [1]: ?   IPython -- An enhanced Interactive Python ====...

30550
来自专栏Create Sun

python 3.x 爬虫基础---常用第三方库(一)

python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 pyth...

1K50
来自专栏Django中文社区

Django Pagination 简单分页

当博客上发布的文章越来越多时,通常需要进行分页显示,以免所有的文章都堆积在一个页面,影响用户体验。Django 内置的 Pagination 能够帮助我们实现简...

41850

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励