1.开启线程的两种方式:
  进程,线程:
   进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合)而线程才是cpu上的执行单位)
   1.同一个进程内的多个线程共享该进程内的地址资源
  2.创建线程的开销远小于创建进程的开销(创建一个进程,就是创建一个车间,涉及到申请空间,
  而且在该空间内建至少一条流水线,但创建线程,就只是在一个车间内造一条流水线,无需申请空间,所以创建开销小)
 # 方式1:
from threading import Thread
import time def sayhi(name):
time.sleep(2)
print('%s say hello'%name) if __name__ == "__main__":
t=Thread(target=sayhi,args=('alice',))
t.start()
print('主线程') # 一个进程,一个主线程,开启了一个线程 # 方式2:
from threading import Thread
import time class Sayhi(Thread):
def __init__(self,name):
super().__init__()
self.name = name def run(self):
time.sleep(2)
print('%s say hello'%self.name) if __name__ == "__main__":
t = Sayhi('alice')
t.start()
print('主线程')
2.进程与线程的区别:
  1.开进程的开销远大于开线程
  2.同一进程内的多个线程共享该进程的地址空间
  3.瞅一眼pid
 # 1.
import time
from threading import Thread
from multiprocessing import Process def piao(name):
print('%s piaoing' %name)
time.sleep(2)
print('%s piao end' %name) if __name__ == '__main__':
# p1=Process(target=piao,args=('egon',))
# p1.start() # 发出去后,没有立刻反应 开进程开销大 t1=Thread(target=piao,args=('egon',))
t1.start() # 发出去后,立刻就反应了,开线程开销小 print('主线程')
"""
主线程
egon piaoing
egon piao end
"""
"""
egon piaoing
主线程
egon piao end
"""
# 2.
from threading import Thread
from multiprocessing import Process n=100
def task():
global n
n=0 if __name__ == '__main__':
# p1=Process(target=task)
# p1.start()
# p1.join() # 彼此隔离的 n = 100 t1=Thread(target=task)
t1.start()
t1.join() # 共享地址空间 n = 0 print('主线程',n)
"""
主线程 100
"""
"""
主线程 0
"""
# 3.
from threading import Thread
from multiprocessing import Process,current_process
import os def task():
print(current_process().pid)
print(os.getpid(),os.getppid()) if __name__ == '__main__':
# p1=Process(target=task)
# p1.start() # pid 不一样
# p1.join() t1=Thread(target=task)
t1.start() # 线程pid 一样
t1.join() print('主线程',current_process().pid)
print('主线程',os.getpid(),os.getppid())
"""
38780
38780 43168
主线程 43168
主线程 43168 12480
"""
"""
58912
58912 12480
主线程 58912
主线程 58912 12480
"""
3.Thread对象的其他属性或方法:
  currentThread().getName()
  t.setName()
  t.is_alive()
  t.isAlive()
  t.join()
  active_count()
  enumerate()
 from threading import Thread,currentThread,active_count,enumerate
import time def task():
print('%s is running'%currentThread().getName())
time.sleep(2)
print('%s is done'%currentThread().getName()) if __name__ == "__main__":
t = Thread(target=task,name='子线程1')
t.start()
# t.join()
# print(t.getName())
# t.setName('儿子线程1')
# currentThread().setName('主进程')
# print(t.is_alive())
# print(t.isAlive())
# print('主线程:',currentThread().getName())
t.join()
# print(active_count()) # 2 没有join 1 有join
print(enumerate()) # [<_MainThread(MainThread, started 41144)>] """
Thread-1 is running
Thread-1
主线程 MainThread
Thread-1 is done
"""
"""
子线程1 is running
子线程1
主线程 MainThread
子线程1 is done
"""
"""
子线程1 is running
主线程 MainThread
儿子线程1 is done
"""
"""
子线程1 is running
主线程: 主进程
子线程1 is done
"""
"""
子线程1 is running
子线程1 is done
False
False
主线程: MainThread
"""
4.守护线程:
  一个进程什么时候被销毁,
1.不开线程,代码完毕,该进程就被销毁
2.主线程等到所有子线程死了后,他才死
守护线程等到所有的子线程死了后,他才死
 from threading import Thread
import time def sayhi(name):
time.sleep(2)
print('%s say hello' %name) if __name__ == '__main__':
t=Thread(target=sayhi,args=('egon',))
# t.setDaemon(True) #必须在t.start()之前设置
t.daemon=True
t.start() print('主线程')
print(t.is_alive()) # t 跟着死了 一个线程内没有开启非守护线程
"""
主线程
True
""" from threading import Thread
import time def foo():
print(123)
time.sleep(4)
print("end123") def bar():
print(456)
time.sleep(3)
print("end456") if __name__ == '__main__':
t1=Thread(target=foo)
t2=Thread(target=bar) t1.daemon=True
t1.start()
t2.start()
print("main-------")
"""
123 foo time.sleep(1)
456
main-------
end123
end456
"""
"""
123 foo time.sleep(4)
456
main-------
end456
"""

并发编程 - 线程 - 1.开启线程的两种方式/2.进程与线程的区别/3.Thread对象的其他属性或方法/4.守护线程的更多相关文章

  1. python 之 并发编程(开启子进程的两种方式,进程对象的属性)

    第九章并发编程 同一个程序执行多次是多个进程 import time import os ​ print('爹是:',os.getppid()) #父进程PID,(pycharm) print('me ...

  2. 线程池提交任务的两种方式:execute与submit的区别

    Java中的线程池在进行任务提交时,有两种方式:execute和submit方法. 一.execute和submit的区别 execute只能提交Runnable类型的任务,无返回值.submit既可 ...

  3. 8 并发编程-(线程)-多线程与多进程的区别&Thread对象的其他属性或方法

    1.开启速度  在主进程下开启线程比 开启子进程快 # 1 在 主进程下开启线程 from threading import Thread def work(): print('hello') if ...

  4. 并发编程 - 进程 - 1.开启子进程的两种方式/2.查看pid/3.Process对象的其他属性或方法/4.守护进程

    1.开启子进程的两种方式: # 方式1: from multiprocessing import Process import time def task(name): print('%s is ru ...

  5. [操作系统知识储备,进程相关概念,开启进程的两种方式、 进程Queue介绍]

    [操作系统知识储备,进程相关概念,开启进程的两种方式.进程Queue介绍] 操作系统知识回顾 为什么要有操作系统. 程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作 ...

  6. DJango中开启事务的两种方式

    目录 Django中开启事务的两种方式 第一种 第二种 Django中开启事务的两种方式 第一种 from django.db import transaction with transaction. ...

  7. python 之 并发编程(线程理论,开启线程的两种方式,进程与线程的区别,线程对象的其他方法)

    9.9 线程理论 1.什么是线程 线程指的是一条流水线的工作过程 进程根本就不是一个执行单位,进程其实是一个资源单位,一个进程内自带一个线程,线程才是执行单位 2.进程VS线程 同一进程内的线程们共享 ...

  8. 子进程回收资源两种方式,僵尸进程与孤儿进程,守护进程,进程间数据隔离,进程互斥锁,队列,IPC机制,线程,守护线程,线程池,回调函数add_done_callback,TCP服务端实现并发

    子进程回收资源两种方式 - 1) join让主进程等待子进程结束,并回收子进程资源,主进程再结束并回收资源. - 2) 主进程 “正常结束” ,子进程与主进程一并被回收资源. from multipr ...

  9. Java并发编程:Java实现多线程的几种方式

    在Java中,多线程主要的实现方式有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService ...

随机推荐

  1. CentOS6.2下安装配置MySql

    转自:Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置 如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.ecli ...

  2. HADOOP 2.6 INSTALLING ON UBUNTU 14.04 (hadoop 2.6 部署到ubuntu 14.04上面)

    Hadoop on Ubuntu 14.04 In this chapter, we'll install a single-node Hadoop cluster backed by the Had ...

  3. qt中的菜单QMenu QAction

    Qt中要建立菜单,有三个类很重要: QMenuBar(QWidget * parent = 0) QMenu(QWidget * parent = 0) QMenu(const QString &am ...

  4. UCOS2系统内核讲述(二)_初始化调用函数

    Ⅰ.写在前面 学习本文之前可以参看我前面的文章: UCOS2_STM32F1移植详细过程(汇总文章) UCOS2系统内核讲述(一)_总体描述 还是按照上一篇文章的思维(从外到内),本文(结合源代码)进 ...

  5. tomcat安全优化

    1.1.1 tomcat.安全优化. 第一:关闭端口修改,关闭端口默认8005,修改默认关闭端口防止被入侵关闭. 第二:ajp连接端口是和apache的链接端口,没用可以注释8009 第三禁用管理端, ...

  6. 深度剖析java编码,彻底解决java乱码问题_1

    理解: 1,Java编译器(即编译成class文件时) 用的是unicode字符集. 2,乱码主要是由于不同的字符集相互转换导致的,理论上各个字符的编码规则是不同的,是不能相互转换的,所以根本解决乱码 ...

  7. 如意云路由刷PandoraBox

    目录 1 准备固件 2 使用uboot刷机 2.1 修改IP 2.2 开始刷写 3 ssh登录 4 刷回如意云 准备固件 http://downloads.openwrt.org.cn/Pandora ...

  8. android 开发之hello world!

    http://blog.sina.com.cn/s/blog_4e08922b0100nh6e.html http://blog.csdn.net/poechant/article/details/7 ...

  9. Worktile中百万级实时消息推送服务的实现

    Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/

  10. Python爬虫(八)

    源码: import requests import re from my_mysql import MysqlConnect import time,random # 获取招聘详情链接 def ge ...