中化山东公路建设集团网站,网建管理是干嘛的,软文广告100字,工程中标公示查询1.多线程
线程是程序执行的最小单位#xff0c;一个进程至少有一个线程。 提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。 进程之间不能共享内存#xff0c;但线程之间共享内存非常容易。 Python 常用的多线程库有threading 和…1.多线程
线程是程序执行的最小单位一个进程至少有一个线程。 提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。 进程之间不能共享内存但线程之间共享内存非常容易。 Python 常用的多线程库有threading 和 Queue,threading 模块的Thread 类是主要的执行对象. 住线程和子线程是并行工作的
示例:
from threading import Thread
from time import sleep, ctimedef func(name, sec):print(---开始---, name, 时间, ctime())sleep(sec)print(***结束***, name, 时间, ctime())# 创建 Thread 实例
t1 Thread(targetfunc, args(第一个线程, 1))
t2 Thread(targetfunc, args(第二个线程, 2))# 启动线程运行
t1.start() #两个线程在有足够运行空间的前提下会同时运行
t2.start()# 等待所有线程执行完毕
t1.join() # join() 等待线程终止要不然一直挂起
t2.join()start() 是方法用来启动线程的执行。 join() 方法是一种自旋锁它用来等待线程终止。也可以提供超时的时间当线程运行达到超时时间后结束线程如join(500)500毫秒后结束线程运行。
运行结果,程序总共运行两秒如果程序按照线性运行需要3秒节约1秒钟 —开始— 一 时间 Fri Nov 29 11:34:31 2019 —开始— 二 时间 Fri Nov 29 11:34:31 2019 结束 一 时间 Fri Nov 29 11:34:32 2019 结束 二 时间 Fri Nov 29 11:34:33 2019 在下面程序中住线程执行完毕了子线程依旧在执行是由于子主线程并行执行造成的
import time
import threadingdef work():for i in range(10):print(work...)time.sleep(0.2)if __name__ __main__:# 创建子进程work_thread threading.Thread(targetwork)# 启动线程work_thread.start()# 延时1stime.sleep(1)print(主线程执行完毕)可以通过守护线程的方法来实现子线程可以随主线程注销而注销 work_thread threading.Thread(targetwork, daemonTrue) 或者work_thread.setDaemon(True)
import time
import threadingdef work():for i in range(10):print(work...)time.sleep(0.2)if __name__ __main__:# 创建子线程并设置守护主线程work_thread threading.Thread(targetwork, daemonTrue)# 启动线程work_thread.start()# 延时1stime.sleep(1)print(主线程执行完毕)2.多进程
进程是资源分配的最小单位一个程序至少有一个进程。 进程间不共享全局变量即使变量名是相同的其各自指向的地址也不同 创建子进程会对主进程资源进行拷贝也就是说子进程是主进程的一个副本好比是一对双胞胎之所以进程之间不共享全局变量是因为操作的不是同一个进程里面的全局变量只不过不同进程里面的全局变量名字相同而已。
用的库是multiprocessing
和多线程一样进程和主进程是并行执行的所以在主进程执行完后子进程仍然在执行工作函数中的任务。
多进程也有守护进程机制work_process.daemon True 示例
import multiprocessing
import time# 工作函数
def work():for i in range(10):print(工作中...)time.sleep(0.2)if __name__ __main__:# 创建子进程work_process multiprocessing.Process(targetwork)# 设置守护主进程主进程退出后子进程直接销毁不再执行子进程中的代码work_process.daemon True# 启动子进程work_process.start()# 延迟1stime.sleep(1)print(主进程执行完毕)3.总结
多进程和多线程的区别进程是分配资源的最小单位线程是程序执行的最小单位进程负责分配资源线程负责执行线程可以和其他同属一个进程的线程共享资源。
参考: https://zhuanlan.zhihu.com/p/91601448 https://zhuanlan.zhihu.com/p/637105176