线程+创建线程的两种方式+线程对象及其他方法+守护线程

"""
进程:资源单位
线程:执行单位

进程就类似于是一个工厂
而线程就是工厂里面的一条条的流水线


每一个进程中都自带一个线程,至少有一个线程
同一个进程下 多个线程数据是共享的(*****)
进程自带的那个线程我们会人为的叫它 主线程
但是同一个进程下 多个线程没有主次之分

开启线程的开销 远远小于开启进程的开销
开进程
1.申请内存空间
2.执行代码
开线程
上面的两个都没有
"""



#创建线程  第一种方式
from threading import Thread
import time


def task(name):
print('%s is running' % name)
time.sleep(3)
print('%s is end' % name)

t = Thread(target=task,args=('jason',))
t.start() # 创建线程 这句话一运行完 线程几乎就已经创建完毕了
print('主')
# ##这个创建一个线程,这个也是异步执行的,方法和之前的创建进程的方式一模一样,只不过是使用的模块不一样罢了
#有一点不同,创建进程需要将那个创建的代码放到 if file_name == __main__: 下面去,而创建线程是不需要的



# 第二种方式
from threading import Thread
import time
class MyThread(Thread):
def __init__(self,name):
super().__init__()
self.name = name
def run(self):
print('%s is running' % self.name)
time.sleep(3)
print('%s is end' % self.name)
t = MyThread('jason')
t.start()
print('主')



# 同一个进程下多个线程数据是共享
#一旦有一个线程将某个数据修改了,那么其他线程看到的数据也是修改之后的值
from threading import Thread,active_count
import os
import time

money = 10


def task():
global money
money = 0
print(os.getpid())
time.sleep(1)


t = Thread(target=task)
t.start()
print("money的值是:",money)
t.join()
print("money 的值是:",money)


print(active_count()) # 统计当前进程下 存活的线程数
print(os.getpid())
print('主')

"""
主线程一定要等待所有子线程的结束才会结束
因为主线程一旦结束意味着整个进程的结束,那么会造成子线程无法正常运行
"""


from threading import Thread,current_thread
import time


def task1():
print('%s is running' % current_thread().name)
time.sleep(3)
print('%s is end' % current_thread().name)

def task2():
print(" %s is running " % current_thread().name)
time.sleep(4)
print("%s is end " % current_thread().name)


t1 = Thread(target=task1)
t2 = Thread(target=task2)
t2.daemon = True
t1.start()
t2.start()
print('主')
"""
同一个进程下
主线程会等待所有非守护线程的结束才会结束
主线程结束之后,守护的线程不管有没有执行完,都立刻结束,直接停止运行

所以上面的代码执行的结果是:
Thread-1 is running
Thread-2 is running

Thread-1 is end

因为线程2的延迟时间是4秒,而且被作为了守护线程,当非守护线程线程1结束,主线程也就结束了
这个时候,守护线程2还没有结束,但是也必须直接停止.所以它的那个Thread-2 is end 是没有打印出来的

"""
print('===================================================')

from threading import Thread
from multiprocessing import Process
import time
def foo():
print(123)
time.sleep(3)
print("end123")
def bar():
print(456)
time.sleep(1)
print("end456")
if __name__ == '__main__':
t1 = Thread(target=foo)
t2 = Thread(target=bar)
t1.daemon = True
t1.start()
t2.start()
print("main-------")

猜你喜欢

转载自www.cnblogs.com/1832921tongjieducn/p/11312592.html