网站制作流程详解(学做网站第一步),虚拟主机可建站1个是不是只能放一个网站,在百度上怎么建立网站吗,做医院网站文章目录 一、操作系统简介二、进程三、线程四、线程的调用1、示例2、join方法3、setDaemon方法4、继承式调用#xff08;不推荐#xff09;5、其他方法 一、操作系统简介
①操作系统是一个用来协调、管理和控制计算机硬件和软件资源的系统程序#xff0c;它位于硬件和应用… 文章目录 一、操作系统简介二、进程三、线程四、线程的调用1、示例2、join方法3、setDaemon方法4、继承式调用不推荐5、其他方法 一、操作系统简介
①操作系统是一个用来协调、管理和控制计算机硬件和软件资源的系统程序它位于硬件和应用程序之间。它可以向上给程序员提供管理硬件的接口方便编写应用程序。 ②操作系统内核是一个管理和控制程序负责管理计算机所有物理资源其中包括文件系统、内存管理、设备管理和进程管理。
二、进程
①进程是一个程序在一个数据集上的一次动态执行过程。 ②进程一般由程序、数据集、进程控制块三部分组成。 ③进程控制块是用来记录进程的外部特征描述进程的执行变化过程系统可以利用它来控制和管理进程。它是系统感知进程存在的唯一标识。
三、线程
①进程是最小的资源单位。线程是最小执行单元。进程是线程的容器线程是进程的一个实体。 ②一个运行的程序至少有一个进程一个进程至少有一个线程。 ③进程在执行过程中拥有独立的内存单元而多个线程共享其内存。 ④线程在执行中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序出口。但是线程不能独立于进程存在。 ⑤一个线程可以创建和撤销另一个线程。 ⑥同一个进程中的多个线程之间可以并发执行。
四、线程的调用
1、示例
import threading
import timedef Hi(num):print(hello %d\n %num,end)time.sleep(3)if __name__ __main__:t1 threading.Thread(targetHi, args(10,)) # 主线程创建了一个子线程对象t1.start() # 子线程t1运行函数H1t2 threading.Thread(targetHi, args(9,)) # 主线程创建了一个子线程对象t2.start() # 子线程t2运行函数H1print(ending,end)**上述代码分析**主线程按照顺序从上到下顺序执行主线程开设子线程后与子线程并发运行。所以上述代码会先输出 hello 10 hello 9 ending 然后等待三秒程序运行结束。
2、join方法
join方法在子进程完成运行之前这个子进程的父进程一直被阻塞。
import threading
import timedef music():print(begin to listen %s\n %time.strftime(%X),end)time.sleep(3)print(stop to listen %s\n %time.strftime(%X),end)def game():print(begin to game %s\n %time.strftime(%X),end)time.sleep(6)print(stop to game %s\n %time.strftime(%X),end)if __name__ __main__:t1 threading.Thread(targetmusic) # 主线程创建了一个子线程对象t1.start() # 子线程t1运行函数H1t2 threading.Thread(targetgame) # 主线程创建了一个子线程对象t2.start() # 子线程t2运行函数H1t1.join() # 阻塞主线程主线程会等待t1线程执行完毕后再继续往下执行print(ending %s\n %time.strftime(%X),end)
begin to listen 15:04:40
begin to game 15:04:40
stop to listen 15:04:43
ending 15:04:43
stop to game 15:04:46import threading
import timedef music():print(begin to listen %s\n%time.strftime(%X),end)time.sleep(5)print(stop to listen %s\n % time.strftime(%X),end)def game():time.sleep(1)t3threading.Thread(targetmusic)t3.start()print(begin to play game %s\n%time.strftime(%X),end)time.sleep(3)print(stop to play game %s\n % time.strftime(%X),end)if __name__ __main__:t1 threading.Thread(targetmusic)t2 threading.Thread(targetgame)t1.start()t2.start()t1.join()t2.join()print(ending %s\n %time.strftime(%X),end)
begin to listen 15:29:44
begin to listen 15:29:45
begin to play game 15:29:45
stop to play game 15:29:48
stop to listen 15:29:49
ending 15:29:49
stop to listen 15:29:50import threading
import timedef music():print(begin to listen %s\n%time.strftime(%X),end)time.sleep(5)print(stop to listen %s\n % time.strftime(%X),end)def game():time.sleep(1)t3threading.Thread(targetmusic)t3.start()t3.join()print(begin to play game %s\n%time.strftime(%X),end)time.sleep(3)print(stop to play game %s\n % time.strftime(%X),end)if __name__ __main__:t1 threading.Thread(targetmusic)t2 threading.Thread(targetgame)t1.start()t2.start()t1.join()print(ending %s\n %time.strftime(%X),end)
begin to listen 15:35:54
begin to listen 15:35:55
stop to listen 15:35:59
ending 15:35:59
stop to listen 15:36:00
begin to play game 15:36:00
stop to play game 15:36:033、setDaemon方法
setDaemon方法将线程声明为守护线程必须在start()方法调用之前设置将子线程设置为守护线程后主线程只要完成了子线程就会和主线程一起退出。该方法基本与join方法是相反的。
import threading
from time import ctime,sleep
import timedef ListenMusic(name):print(Beign listening to %s %s\n %(name,time.strftime(%X)), end)sleep(3)print(end listening %s\n %time.strftime(%X), end)def RecordBlog(title):print(Begin recording the %s %s\n %(title,time.strftime(%X)),end)sleep(5)print(end recording %s\n %time.strftime(%X), end)threads []t1 threading.Thread(targetListenMusic, args(水手,))
t2 threading.Thread(targetRecordBlog, args(python线程,))threads.append(t1)
threads.append(t2)if __name__ __main__:t1.setDaemon(True)for t in threads:t.start()print(all over %s\n %time.strftime(%X), end)
Beign listening to 水手 01:22:27
Begin recording the python线程 01:22:27
all over 01:22:27
end listening 01:22:30
end recording 01:22:32import threading
from time import ctime,sleep
import timedef ListenMusic(name):print(Beign listening to %s %s\n %(name,time.strftime(%X)), end)sleep(3)print(end listening %s\n %time.strftime(%X), end)def RecordBlog(title):print(Begin recording the %s %s\n %(title,time.strftime(%X)),end)sleep(5)print(end recording %s\n %time.strftime(%X), end)threads []t1 threading.Thread(targetListenMusic, args(水手,))
t2 threading.Thread(targetRecordBlog, args(python线程,))threads.append(t1)
threads.append(t2)if __name__ __main__:t2.setDaemon(True)for t in threads:t.start()print(all over %s\n %time.strftime(%X), end)
Beign listening to 水手 01:23:23
Begin recording the python线程 01:23:23
all over 01:23:23
end listening 01:23:264、继承式调用不推荐
import threading
import timeclass MyThread(threading.Thread):def __init__(self, num):threading.Thread.__init__(self)self.num numdef run(self): # # run方法是重写的方法线程对象执行start方法要运行的该函数print(running on number:%s, %s\n % (self.num, time.strftime(%X)), end)time.sleep(3)print(结束:%s, %s\n % (self.num,time.strftime(%X)), end)if __name__ __main__:t1 MyThread(1)t2 MyThread(2)t1.start()t2.start()print(ending %s\n % time.strftime(%X), end)
running on number:1, 22:36:46
running on number:2, 22:36:46
ending 22:36:46
结束:2, 22:36:49
结束:1, 22:36:495、其他方法
is_alive() 返回线程是否活动的 getName() 返回线程名 setName() 设置线程名
import threading
import timedef test():time.sleep(2)t1 threading.Thread(targettest)
t1.start()
print(t1.is_alive()) # True
print(t1.getName()) # Thread-1
t1.setName(T1)
print(t1.getName()) # T1threading模块提供的一些方法 threading.currentThread() 返回当前的线程变量
import threading
import timedef test():time.sleep(2)print(threading.currentThread()) # Thread(Thread-1, started 16028)t1 threading.Thread(targettest)
t1.start()
print(threading.currentThread()) # _MainThread(MainThread, started 14244)threading.enumerate() 返回一个包含正在运行的线程的列表
import threading
import timedef test():time.sleep(2)t1 threading.Thread(targettest)
t2 threading.Thread(targettest)
t1.start()
t2.start()print(threading.enumerate())
# [_MainThread(MainThread, started 26852), Thread(Thread-1, started 24396), Thread(Thread-2, started 15376)]threading.active_count() 返回正在运行的线程数量
import threading
import timedef test():time.sleep(2)t1 threading.Thread(targettest)
t2 threading.Thread(targettest)
t1.start()
t2.start()print(threading.active_count()) # 3