专栏首页Python小屋Python多线程编程基础3:创建线程与调用函数的区别

Python多线程编程基础3:创建线程与调用函数的区别

在上一节Python多线程编程基础2:如何创建线程中,我们已经知道,创建线程并运行实际上也是执行一段代码,那么把这些代码封装到函数中之后,直接调用函数和创建线程再运行有什么区别呢?这是本文要解释的内容。简单地说,调用函数属于阻塞模式,必须要等函数运行结束并返回之后才能执行后面的代码;而线程属于并发非阻塞模式,创建并启动子线程之后子线程和主线程并发执行,除非有现成同步的代码和机制。

下面代码首先定义一个函数,然后调用这个函数,函数执行结束之后再继续执行后面的代码:

from threading import Thread

from time import sleep

def demo(n):

sleep(n)

print(n)

demo(3)

print('ok')

运行结果为:

3

ok

而下面的代码首先定义函数,然后创建线程来执行这个函数中的代码:

from threading import Thread

from time import sleep

def demo(n):

sleep(n)

print(n)

t = Thread(target=demo, args=(3,))

t.start()

print('ok')

运行结果为:

ok

3

本文分享自微信公众号 - Python小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-07-12

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python批量下载电子邮件附件并汇总合并Excel文件

    首先,通过查阅资料,了解电子邮件和Excel文件的结构,确定要用到的标准库和扩展库,并进行导入:

    Python小屋屋主
  • Python使用最小二乘法求解回归直线案例一则

    Python小屋屋主
  • 在Python程序中设置函数最大递归深度

    在函数调用时,为了保证能够正确返回,必须进行保存现场和恢复现场,也就是被调函数结束后能够回到主调函数中离开时的位置然后继续执行主调函数中的代码。这些现场或上下文...

    Python小屋屋主
  • 池化技术

    池化技术:把一些能够复用的东西(比如说数据库连接、线程)放到池中,避免重复创建、销毁的开销,从而极大提高性能。

    用户5325874
  • 13.程序编程进阶:函数

    写在前面: 经过前面几部分的学习,我们已经可以开发常规的一些简单功能处理程序了。 但是对于我们的项目开发还是远远不够的。本节内容开始进入基础进阶部分的学习

    大牧莫邪
  • Java并发包源码分析:任务异步执行的结果Future和FutureTask

    Runnable任务在Executor线程执行器当中是异步执行的,而有些任务是需要返回执行结果的,故在Executor派生接口ExecutorService接口...

    IT大咖说
  • Office 365 离线安装

              有个O365 的project需要安装Office365 Office,但是客户机不能连接网络,so要实现离线安装了。之前一直安装都是提示安...

    月缺
  • Spring Boot使用@Async实现异步调用:自定义线程池

    在之前的Spring Boot基础教程系列中,已经通过《Spring Boot中使用@Async实现异步调用》一文介绍过如何使用 @Async注解来实现异步调用...

    程序猿DD
  • 我见过的最糟糕的程序代码

    原文出处: jacquesmattheij 译文出处:外刊IT评论 大多数的客户项目在任务完成之后都会很快的从记忆里消退,但有些,你一辈子都不会忘记。我要说...

    wangxl
  • Java并发编程笔记——J.U.C之executors框架:executors框架设计理念

    juc-executors框架是整个J.U.C包中类/接口关系最复杂的框架,真正理解executors框架的前提是理清楚各个模块之间的关系,高屋建瓴,从整体到局...

    须臾之余

扫码关注云+社区

领取腾讯云代金券