进程:资源单位
线程:执行单位
进程:资源单位(起一个进程仅仅只是在内存空间中开辟一块独立的空间)
线程:执行单位(真正被cpu执行的其实是进程里面的线程,线程指的就是代码的执行过程,执行代码中所需要使用到的资源都找所在的进程索要)
进程和线程都是虚拟单位,只是为了我们更加方便的描述问题
3.1、方式一
from threading import Thread
import time
def task(name):
print(F‘{name} is running‘)
time.sleep(1)
print(F‘{name} is stopping‘)
# 开线程的代码不需要写在main中
# 但是习惯性的将启动命令写在main下面
t = Thread(target=task,args=(‘tzh‘,))
t.start()
print(‘我是主线程‘)
3.2、方式二
from threading import Thread
import time
class MyThead(Thread):
def __init__(self,name):
#重写别人的方法
super().__init__()
self.name = name
def run(self):
print(F‘{self.name} is running‘)
time.sleep(1)
print(F‘{self.name} is stoppings‘)
print(‘tzh666‘)
if __name__ == ‘__main__‘:
t = MyThead(‘tzh‘)
t.start()
from threading import Thread
import time
def task(name):
print(‘%s is running‘%name)
time.sleep(3)
print(‘%s is over‘%name)
if __name__ == ‘__main__‘:
t = Thread(target=task,args=(‘egon‘,))
t.start()
t.join() # 主线程等待子线程运行结束再执行
print(‘主‘)
from threading import Thread
import time
money = 100
def task():
global money
money = 666
print(money)
if __name__ == ‘__main__‘:
t = Thread(target=task)
t.start()
t.join()
print(money)
from threading import Thread, active_count, current_thread
import os, time
def task():
print(F‘子进程号是:{os.getpid()}‘)
print(F‘子线程名字是:{current_thread().name}‘)
time.sleep(2)
if __name__ == ‘__main__‘:
t = Thread(target=task)
t.start()
#打印出来是一样的,因为他们在同一个下进程中
print(F‘主进程号是:{os.getpid()}‘)
print(F‘主线程名字是:{current_thread().name}‘)
print(F‘活跃的线程数:{active_count()}‘)
from threading import Thread
import time
def task(name):
print(‘%s is running‘%name)
time.sleep(1)
print(‘%s is over‘%name)
if __name__ == ‘__main__‘:
t = Thread(target=task, args=(‘tzh‘, ))
t.daemon = True
t.start()
print(‘主‘)
from threading import Thread
import time
def foo():
print(123)
time.sleep(1)
print(‘end123‘)
def func():
print(456)
time.sleep(3)
print(‘end456‘)
if __name__ == ‘__main__‘:
t1 = Thread(target=foo)
t2 = Thread(target=func)
t1.daemon = True
t1.start()
t2.start()
print(‘主.......‘)
--输出--
123
456
主.......
end123
end456
from threading import Thread, Lock
import time
money = 100
mutex = Lock()
def task():
global money
#上锁
mutex.acquire()
tmp = money
time.sleep(0.1)
money = tmp - 1
#用完之后释放
mutex.release()
if __name__ == ‘__main__‘:
t_list = []
for i in range(100):
t = Thread(target=task)
t.start()
t_list.append(t)
for t in t_list:
t.join()
print(money)
原文:https://www.cnblogs.com/hsyw/p/13758812.html