![Python語(yǔ)言編程基礎(chǔ)多任務(wù)編程課件_第1頁(yè)](http://file4.renrendoc.com/view/d9911a6d4f982c424a2677bb534d3816/d9911a6d4f982c424a2677bb534d38161.gif)
![Python語(yǔ)言編程基礎(chǔ)多任務(wù)編程課件_第2頁(yè)](http://file4.renrendoc.com/view/d9911a6d4f982c424a2677bb534d3816/d9911a6d4f982c424a2677bb534d38162.gif)
![Python語(yǔ)言編程基礎(chǔ)多任務(wù)編程課件_第3頁(yè)](http://file4.renrendoc.com/view/d9911a6d4f982c424a2677bb534d3816/d9911a6d4f982c424a2677bb534d38163.gif)
![Python語(yǔ)言編程基礎(chǔ)多任務(wù)編程課件_第4頁(yè)](http://file4.renrendoc.com/view/d9911a6d4f982c424a2677bb534d3816/d9911a6d4f982c424a2677bb534d38164.gif)
![Python語(yǔ)言編程基礎(chǔ)多任務(wù)編程課件_第5頁(yè)](http://file4.renrendoc.com/view/d9911a6d4f982c424a2677bb534d3816/d9911a6d4f982c424a2677bb534d38165.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Python程序設(shè)計(jì)教程授課教師:第1頁(yè),共90頁(yè)。第9章 多任務(wù)編程課程描述多任務(wù)編程通常指用戶可以在同一時(shí)間內(nèi)運(yùn)行多個(gè)應(yīng)用程序,也指一個(gè)應(yīng)用程序內(nèi)可以在同一時(shí)間內(nèi)運(yùn)行多個(gè)任務(wù)。多任務(wù)編程是影響應(yīng)用程序性能的重要因素。第2頁(yè),共90頁(yè)。本章知識(shí)點(diǎn)9.1 多進(jìn)程編程9.2 進(jìn)程編程9.3 多線程編程第3頁(yè),共90頁(yè)。9.1 多進(jìn)程編程9.1.1 什么是進(jìn)程9.1.2 進(jìn)程的狀態(tài)第4頁(yè),共90頁(yè)。9.1.1 什么是進(jìn)程進(jìn)程是正在運(yùn)行的程序的實(shí)例。每個(gè)進(jìn)程至少包含一個(gè)線程,它從主程序開(kāi)始執(zhí)行,直到退出程序,主線程結(jié)束,該進(jìn)程也被從內(nèi)存中卸載。主線程在運(yùn)行過(guò)程中還可以創(chuàng)建新的線程,實(shí)現(xiàn)多線程的功能。
2、第5頁(yè),共90頁(yè)。進(jìn)程由如下幾個(gè)部分組成。 與程序相關(guān)聯(lián)的可執(zhí)行代碼的映像; 內(nèi)存空間(通常是虛擬內(nèi)存中的一些區(qū)域),其中保存可執(zhí)行代碼、進(jìn)程的特定數(shù)據(jù)、用于記錄活動(dòng)例程和其他事件的調(diào)用棧、用于保存實(shí)時(shí)產(chǎn)生的中間計(jì)算結(jié)果的堆(heap)。 分配給進(jìn)程的資源的操作系統(tǒng)描述符(比如文件句柄)以及其他數(shù)據(jù)資源。 安全屬性,比如進(jìn)程的所有者和權(quán)限。 處理器的狀態(tài),比如寄存器的內(nèi)容、物理內(nèi)存地址等。第6頁(yè),共90頁(yè)。9.1.2 進(jìn)程的狀態(tài) 在操作系統(tǒng)內(nèi)核中,進(jìn)程可以被標(biāo)記成“被創(chuàng)建”(created)、“就緒”(ready)、“運(yùn)行”(running)、“阻塞”(blocked)、“掛起”(suspen
3、d)和“終止”(terminated)等狀態(tài)。各種狀態(tài)的切換過(guò)程如下: 當(dāng)其被從存儲(chǔ)介質(zhì)中加載到內(nèi)存中,進(jìn)程的狀態(tài)為“被創(chuàng)建”。 被創(chuàng)建后,進(jìn)程調(diào)度器會(huì)自動(dòng)將進(jìn)程的狀態(tài)設(shè)置為“就緒”。此時(shí),進(jìn)程等待調(diào)度器做上下文切換。處理器空閑時(shí),器將進(jìn)程加載到處理器中,然后進(jìn)程的狀態(tài)變成“運(yùn)行”,處理器開(kāi)始執(zhí)行該進(jìn)程的指令。 如果進(jìn)程需要等待某個(gè)資源(比如用戶輸入、打開(kāi)文件、執(zhí)行打印操作等),它將會(huì)被標(biāo)記為“阻塞”狀態(tài)。當(dāng)進(jìn)程獲得了等待的資源后,它的狀態(tài)又會(huì)變回“就緒”。 當(dāng)內(nèi)存中的所有進(jìn)程都處于“阻塞”狀態(tài)時(shí),Windows會(huì)將其中一個(gè)進(jìn)程設(shè)置為“掛起”狀態(tài),并將其在內(nèi)存中的數(shù)據(jù)保存到磁盤中。這樣可以釋放
4、內(nèi)存空間給其他進(jìn)程。Windows也會(huì)把導(dǎo)致系統(tǒng)不穩(wěn)定的進(jìn)程掛起。 一旦進(jìn)程執(zhí)行完成或者被操作系統(tǒng)終止,它就會(huì)被從內(nèi)存中移除或者被設(shè)置為“被終止”狀態(tài)。第7頁(yè),共90頁(yè)。Windows進(jìn)程的狀態(tài)切換第8頁(yè),共90頁(yè)。9.2 進(jìn)程編程9.2.1 創(chuàng)建進(jìn)程9.2.2 枚舉系統(tǒng)進(jìn)程9.2.3 終止進(jìn)程 9.2.4 進(jìn)程池第9頁(yè),共90頁(yè)。9.2.1 創(chuàng)建進(jìn)程可以引用subprocess模塊來(lái)管理進(jìn)程,方法如下:import subprocess第10頁(yè),共90頁(yè)。1subprocess.call()函數(shù)可以調(diào)用subprocess.call()方法創(chuàng)建進(jìn)程,基本語(yǔ)法如下:trtcode = subp
5、rocess.call(可執(zhí)行程序)trtcode返回可執(zhí)行程序的退出信息。第11頁(yè),共90頁(yè)?!纠?-1】import subprocessretcode = subprocess.call(notepad.exe)print(retcode)可以通過(guò)元祖的形式指定運(yùn)行程序的參數(shù),方法如下:trtcode = subprocess.call(可執(zhí)行程序, 參數(shù))第12頁(yè),共90頁(yè)?!纠?-2】import subprocessretcode = subprocess.call(notepad.exe,1.txt)print(retcode)第13頁(yè),共90頁(yè)。2subprocess.Pope
6、n()函數(shù)進(jìn)程對(duì)象 = subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)第14頁(yè),共90頁(yè)。參數(shù)說(shuō)明如下 args:可以是字符串或者序列類型(例如列表和元組),用于指定進(jìn)程的可執(zhí)行文件及其參數(shù)。 bufsize:指定
7、緩沖區(qū)的大小。 executable:用于指定可執(zhí)行程序。一般通過(guò)args參數(shù)來(lái)設(shè)置所要運(yùn)行的程序。如果將參數(shù)shell設(shè)為 True,則executable用于指定程序使用的shell。在windows平臺(tái)下,默認(rèn)的shell由COMSPEC環(huán)境變量來(lái)指定,即命令窗口。 stdin:指定程序的標(biāo)準(zhǔn)輸入,默認(rèn)是鍵盤。 stdout:指定程序的標(biāo)準(zhǔn)輸出,默認(rèn)是屏幕。 stderr:指定程序的標(biāo)準(zhǔn)錯(cuò)誤輸出,默認(rèn)是屏幕。 preexec_fn:只在Unix平臺(tái)下有效,用于指定一個(gè)可執(zhí)行對(duì)象,它將在子進(jìn)程運(yùn)行之前被調(diào)用。第15頁(yè),共90頁(yè)。 close_fds:在windows平臺(tái)下,如果close_
8、fds被設(shè)置為True,則新創(chuàng)建的子進(jìn)程將不會(huì)繼承父進(jìn)程的輸入、輸出和錯(cuò)誤管道。 shell:如果shell被設(shè)為true,程序?qū)⑼ㄟ^(guò)shell來(lái)執(zhí)行。 cwd:指定進(jìn)程的當(dāng)前目錄。 env:指定進(jìn)程的環(huán)境變量。 universal_newlines:指定是否使用統(tǒng)一的文本換行符。在不同操作系統(tǒng)下,文本的換行符是不一樣的。例如,在windows下用/r/n 表示換行,而Linux下用 /n 。如果將此參數(shù)設(shè)置為True,Python統(tǒng)一把這些換行符當(dāng)作 /n 來(lái)處理。 startupinfo和creationflags:只在windows下用效,它們將被傳遞給底層的CreateProcess(
9、)函數(shù),用于設(shè)置進(jìn)程的一些屬性,例如主窗口的外觀和進(jìn)程的優(yōu)先級(jí)等。第16頁(yè),共90頁(yè)。【例9-3】import subprocessp = subprocess.Popen(dir, shell=True) p.wait()第17頁(yè),共90頁(yè)。運(yùn)行結(jié)果python 例9-3.py第18頁(yè),共90頁(yè)。【例9-4】import subprocessimport datetimeprint (datetime.datetime.now()p=subprocess.Popen(ping localhost nul,shell=True)print (程序執(zhí)行中.)p.wait()print(datet
10、ime.datetime.now()ping localhost nul命令用于ping本機(jī),目的在于拖延時(shí)間,運(yùn)行結(jié)果如下:2014-12-09 20:48:12.120471程序執(zhí)行中.2014-12-09 20:48:15.242860第19頁(yè),共90頁(yè)。3CreateProcess函數(shù)CreateProcess(appName, commandLine , processAttributes ,threadAttributes , bInheritHandles ,dwCreationFlags , newEnvironment , currentDirectory , startup
11、info參數(shù)說(shuō)明如下:appName,要執(zhí)行的應(yīng)用程序名,可以包括結(jié)對(duì)路徑和文件名,通??梢詾镹ULL。commandLine,要執(zhí)行的命令行。processAttributes,新進(jìn)程的安全屬性,如果為None,則為默認(rèn)的安全屬性。ThreadAttributes,線程安全屬性,如果為None,則為默認(rèn)的安全屬性。bInheritHandles,繼承屬性,如果為None,則為默認(rèn)的繼承屬性。dwCreationFlags,指定附加的、用來(lái)控制優(yōu)先類和進(jìn)程創(chuàng)建的標(biāo)志。其取值見(jiàn)表9-1。這些屬性值都在win32process模塊中定義,例如,使用win32process.CREATE_NO_WI
12、NDOW可以指定新建進(jìn)程是一個(gè)沒(méi)有窗口的控制臺(tái)應(yīng)用程序。newEnvironment,指向新進(jìn)程的環(huán)境塊。如果為NULL,則使用調(diào)用CreateProcess()函數(shù)的進(jìn)程的環(huán)境。currentDirectory,進(jìn)程的當(dāng)前目錄。第20頁(yè),共90頁(yè)。dwCreationFlags參數(shù)的取值取 值說(shuō) 明CREATE_BREAKAWAY_FROM_JOB如果進(jìn)程與一個(gè)作業(yè)相關(guān)聯(lián),則其子進(jìn)程與該作業(yè)無(wú)關(guān)CREATE_DEFAULT_ERROR_MODE新進(jìn)程不繼承調(diào)用CreateProcess()函數(shù)的進(jìn)程的錯(cuò)誤模式,而是使用缺省的錯(cuò)誤模式CREATE_FORCE_DOS以MS-DOS模式運(yùn)行應(yīng)用程
13、序CREATE_NEW_CONSOLE新進(jìn)程打開(kāi)一個(gè)新的控制臺(tái)窗口,而不是使用調(diào)用進(jìn)程的控制臺(tái)窗口CREATE_NEW_PROCESS_GROUP新進(jìn)程是一個(gè)新進(jìn)程組的根進(jìn)程。新進(jìn)程組中包含新建進(jìn)程的所有后代進(jìn)程CREATE_NO_WINDOW新建進(jìn)程是一個(gè)沒(méi)有窗口的控制臺(tái)應(yīng)用程序,因此,它的控制臺(tái)句柄沒(méi)有被設(shè)置CREATE_SEPARATE_WOW_VDM只用于16位Windows應(yīng)用程序。如果設(shè)置,則新進(jìn)程在一個(gè)私有虛擬DOS機(jī)(VDM,Virtual DOS Machine)中運(yùn)行CREATE_SHARED_WOW_VDM只用于16位Windows應(yīng)用程序。如果設(shè)置,則新進(jìn)程在一個(gè)共享虛
14、擬DOS機(jī)中運(yùn)行CREATE_SUSPENDED創(chuàng)建一個(gè)處于掛起狀態(tài)的進(jìn)程CREATE_UNICODE_ENVIRONMENT如果設(shè)置了此選項(xiàng),則參數(shù)newEnvironment使用Unicode字符串DEBUG_PROCESS啟動(dòng)并調(diào)試新進(jìn)程及所有其創(chuàng)建的子進(jìn)程DEBUG_ONLY_THIS_PROCESS啟動(dòng)并調(diào)試新進(jìn)程??梢哉{(diào)用WaitForDebugEvent()函數(shù)接收調(diào)試事件DETACHED_PROCESS對(duì)于控制臺(tái)程序,新進(jìn)程不繼承父控制臺(tái)ABOVE_NORMAL_PRIORITY_CLASS指定新建進(jìn)程的優(yōu)先級(jí)比NORMAL_PRIORITY_CLASS高,但是比HIGH_PR
15、IORITY_CLASS低BELOW_NORMAL_PRIORITY_CLASS指定新建進(jìn)程的優(yōu)先級(jí)比IDLE_PRIORITY_CLASS高,但是比NORMAL_PRIORITY_CLASS低HIGH_PRIORITY_CLASS指定新建高優(yōu)先級(jí)的進(jìn)程IDLE_PRIORITY_CLASS指定只有系統(tǒng)空閑時(shí)才運(yùn)行新建級(jí)的進(jìn)程N(yùn)ORMAL_PRIORITY_CLASS創(chuàng)建一個(gè)普通進(jìn)程REALTIME_PRIORITY_CLASS指定新建最高優(yōu)先級(jí)的進(jìn)程第21頁(yè),共90頁(yè)?!纠?-5】import win32process#打開(kāi)記事本程序,獲得其句柄handle = win32process.C
16、reateProcess(C:Windowsnotepad.exe, None , None , 0 ,win32process.CREATE_NO_WINDOW , None , None ,win32process.STARTUPINFO()第22頁(yè),共90頁(yè)。提示運(yùn)行本實(shí)例之前,需要下載和安裝Pywin32擴(kuò)展庫(kù)。第23頁(yè),共90頁(yè)。9.2.2 枚舉系統(tǒng)進(jìn)程1CreateToolhelp32Snapshot()函數(shù)調(diào)用Windows API CreateToolhelp32Snapshot()可以獲取當(dāng)前系統(tǒng)運(yùn)行進(jìn)程的快照(snapshot),也就是運(yùn)行進(jìn)程的列表,其中包含進(jìn)程標(biāo)示符及其
17、對(duì)應(yīng)的可執(zhí)行文件等信息,函數(shù)原型如下:HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, /指定快照中包含的對(duì)象 DWORD th32ProcessID / 指定獲取進(jìn)程快照的PID。如果為0,則獲取當(dāng)前系統(tǒng)進(jìn)程列表);第24頁(yè),共90頁(yè)。參數(shù)dwFlags的取值取 值說(shuō) 明TH32CS_SNAPALL(15,0 x0000000F)相當(dāng)于指定了TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODULE, TH32CS_SNAPPROCESS, 和 TH32CS_SNAPTHREADTH32CS_SNAPHEAPLIS
18、T(1,0 x00000001)快照中包含指定進(jìn)程的堆列表TH32CS_SNAPMODULE(8,0 x00000008)快照中包含指定進(jìn)程的模塊列表TH32CS_SNAPPROCESS(2,0 x00000002)快照中包含進(jìn)程列表TH32CS_SNAPTHREAD(4,0 x00000004)快照中包含線程列表第25頁(yè),共90頁(yè)。調(diào)用CreateToolhelp32Snapshot()函數(shù)from ctypes.wintypes import *from ctypes import *調(diào)用CreateToolhelp32Snapshot()函數(shù)的代碼如下:kernel32 = windll
19、.kernel32hSnapshot = kernel32.CreateToolhelp32Snapshot(15, 0)第26頁(yè),共90頁(yè)。2Process32First()函數(shù)進(jìn)程對(duì)象 = subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, cre
20、ationflags=0)參數(shù)說(shuō)明如下。 args:可以是字符串或者序列類型(例如列表和元組),用于指定進(jìn)程的可執(zhí)行文件及其參數(shù)。 bufsize:指定緩沖區(qū)的大小。 executable:用于指定可執(zhí)行程序。一般通過(guò)args參數(shù)來(lái)設(shè)置所要運(yùn)行的程序。如果將參數(shù)shell設(shè)為 True,則executable用于指定程序使用的shell。在windows平臺(tái)下,默認(rèn)的shell由COMSPEC環(huán)境變量來(lái)指定,即命令窗口。第27頁(yè),共90頁(yè)。 stdin:指定程序的標(biāo)準(zhǔn)輸入,默認(rèn)是鍵盤。 stdout:指定程序的標(biāo)準(zhǔn)輸出,默認(rèn)是屏幕。 stderr:指定程序的標(biāo)準(zhǔn)錯(cuò)誤輸出,默認(rèn)是屏幕。 pree
21、xec_fn:只在Unix平臺(tái)下有效,用于指定一個(gè)可執(zhí)行對(duì)象,它將在子進(jìn)程運(yùn)行之前被調(diào)用。 close_fds:在windows平臺(tái)下,如果close_fds被設(shè)置為True,則新創(chuàng)建的子進(jìn)程將不會(huì)繼承父進(jìn)程的輸入、輸出和錯(cuò)誤管道。 shell:如果shell被設(shè)為true,程序?qū)⑼ㄟ^(guò)shell來(lái)執(zhí)行。 cwd:指定進(jìn)程的當(dāng)前目錄。 env:指定進(jìn)程的環(huán)境變量。 universal_newlines:指定是否使用統(tǒng)一的文本換行符。在不同操作系統(tǒng)下,文本的換行符是不一樣的。例如,在windows下用/r/n 表示換行,而Linux下用 /n 。如果將此參數(shù)設(shè)置為True,Python統(tǒng)一把這些換
22、行符當(dāng)作 /n 來(lái)處理。 startupinfo和creationflags:只在windows下用效,它們將被傳遞給底層的CreateProcess()函數(shù),用于設(shè)置進(jìn)程的一些屬性,例如主窗口的外觀和進(jìn)程的優(yōu)先級(jí)等。第28頁(yè),共90頁(yè)?!纠?-3】import subprocessp = subprocess.Popen(dir, shell=True) p.wait()第29頁(yè),共90頁(yè)。【例9-3】的運(yùn)行結(jié)果第30頁(yè),共90頁(yè)?!纠?-4】import subprocessimport datetimeprint (datetime.datetime.now()p=subprocess.
23、Popen(ping localhost nul,shell=True)print (程序執(zhí)行中.)p.wait()print(datetime.datetime.now()第31頁(yè),共90頁(yè)。3CreateProcess函數(shù)CreateProcess(appName, commandLine , processAttributes ,threadAttributes , bInheritHandles ,dwCreationFlags , newEnvironment , currentDirectory , startupinfo第32頁(yè),共90頁(yè)。參數(shù)說(shuō)明 appName,要執(zhí)行的應(yīng)用程
24、序名,可以包括結(jié)對(duì)路徑和文件名,通??梢詾镹ULL。 commandLine,要執(zhí)行的命令行。 processAttributes,新進(jìn)程的安全屬性,如果為None,則為默認(rèn)的安全屬性。 ThreadAttributes,線程安全屬性,如果為None,則為默認(rèn)的安全屬性。 bInheritHandles,繼承屬性,如果為None,則為默認(rèn)的繼承屬性。 dwCreationFlags,指定附加的、用來(lái)控制優(yōu)先類和進(jìn)程創(chuàng)建的標(biāo)志。其取值見(jiàn)表9-1。這些屬性值都在win32process模塊中定義,例如,使用win32process.CREATE_NO_WINDOW可以指定新建進(jìn)程是一個(gè)沒(méi)有窗口的控
25、制臺(tái)應(yīng)用程序。 newEnvironment,指向新進(jìn)程的環(huán)境塊。如果為NULL,則使用調(diào)用CreateProcess()函數(shù)的進(jìn)程的環(huán)境。 currentDirectory,進(jìn)程的當(dāng)前目錄。第33頁(yè),共90頁(yè)。dwCreationFlags參數(shù)的取值取 值說(shuō) 明CREATE_BREAKAWAY_FROM_JOB如果進(jìn)程與一個(gè)作業(yè)相關(guān)聯(lián),則其子進(jìn)程與該作業(yè)無(wú)關(guān)CREATE_DEFAULT_ERROR_MODE新進(jìn)程不繼承調(diào)用CreateProcess()函數(shù)的進(jìn)程的錯(cuò)誤模式,而是使用缺省的錯(cuò)誤模式CREATE_FORCE_DOS以MS-DOS模式運(yùn)行應(yīng)用程序CREATE_NEW_CONSOLE
26、新進(jìn)程打開(kāi)一個(gè)新的控制臺(tái)窗口,而不是使用調(diào)用進(jìn)程的控制臺(tái)窗口CREATE_NEW_PROCESS_GROUP新進(jìn)程是一個(gè)新進(jìn)程組的根進(jìn)程。新進(jìn)程組中包含新建進(jìn)程的所有后代進(jìn)程CREATE_NO_WINDOW新建進(jìn)程是一個(gè)沒(méi)有窗口的控制臺(tái)應(yīng)用程序,因此,它的控制臺(tái)句柄沒(méi)有被設(shè)置CREATE_SEPARATE_WOW_VDM只用于16位Windows應(yīng)用程序。如果設(shè)置,則新進(jìn)程在一個(gè)私有虛擬DOS機(jī)(VDM,Virtual DOS Machine)中運(yùn)行CREATE_SHARED_WOW_VDM只用于16位Windows應(yīng)用程序。如果設(shè)置,則新進(jìn)程在一個(gè)共享虛擬DOS機(jī)中運(yùn)行CREATE_SUSP
27、ENDED創(chuàng)建一個(gè)處于掛起狀態(tài)的進(jìn)程CREATE_UNICODE_ENVIRONMENT如果設(shè)置了此選項(xiàng),則參數(shù)newEnvironment使用Unicode字符串DEBUG_PROCESS啟動(dòng)并調(diào)試新進(jìn)程及所有其創(chuàng)建的子進(jìn)程DEBUG_ONLY_THIS_PROCESS啟動(dòng)并調(diào)試新進(jìn)程。可以調(diào)用WaitForDebugEvent()函數(shù)接收調(diào)試事件DETACHED_PROCESS對(duì)于控制臺(tái)程序,新進(jìn)程不繼承父控制臺(tái)ABOVE_NORMAL_PRIORITY_CLASS指定新建進(jìn)程的優(yōu)先級(jí)比NORMAL_PRIORITY_CLASS高,但是比HIGH_PRIORITY_CLASS低BELOW_
28、NORMAL_PRIORITY_CLASS指定新建進(jìn)程的優(yōu)先級(jí)比IDLE_PRIORITY_CLASS高,但是比NORMAL_PRIORITY_CLASS低HIGH_PRIORITY_CLASS指定新建高優(yōu)先級(jí)的進(jìn)程IDLE_PRIORITY_CLASS指定只有系統(tǒng)空閑時(shí)才運(yùn)行新建級(jí)的進(jìn)程N(yùn)ORMAL_PRIORITY_CLASS創(chuàng)建一個(gè)普通進(jìn)程REALTIME_PRIORITY_CLASS指定新建最高優(yōu)先級(jí)的進(jìn)程第34頁(yè),共90頁(yè)。11.2.9 查詢數(shù)據(jù)可以使用SELECT語(yǔ)句查詢表中的數(shù)據(jù),基本使用方法如下所示:SELECT * FROM 表名WHERE 刪除條件表達(dá)式*表示查詢表中所有的
29、字段,當(dāng)執(zhí)行SELECT語(yǔ)句時(shí),指定表中所有滿足WHERE子句條件的行都將被返回?!纠?1-6】 查詢表Employees中列Title等于“部門經(jīng)理”的數(shù)據(jù),可以使用以下SQL語(yǔ)句:SELECT * FROM Employees WHERE Title= 部門經(jīng)理;執(zhí)行結(jié)果如下:|趙六|男|部門經(jīng)理|0.0|4101234567890|2|錢九|男|部門經(jīng)理|0.0|7101234567890|3|第35頁(yè),共90頁(yè)?!纠?-5】import win32process#打開(kāi)記事本程序,獲得其句柄handle = win32process.CreateProcess(C:Windowsnote
30、pad.exe, None , None , 0 ,win32process.CREATE_NO_WINDOW , None , None ,win32process.STARTUPINFO()第36頁(yè),共90頁(yè)。9.2.2 枚舉系統(tǒng)進(jìn)程1CreateToolhelp32Snapshot()函數(shù)調(diào)用Windows API CreateToolhelp32Snapshot()可以獲取當(dāng)前系統(tǒng)運(yùn)行進(jìn)程的快照(snapshot),也就是運(yùn)行進(jìn)程的列表,其中包含進(jìn)程標(biāo)示符及其對(duì)應(yīng)的可執(zhí)行文件等信息,函數(shù)原型如下:HANDLE WINAPI CreateToolhelp32Snapshot( DWORD
31、 dwFlags, /指定快照中包含的對(duì)象 DWORD th32ProcessID / 指定獲取進(jìn)程快照的PID。如果為0,則獲取當(dāng)前系統(tǒng)進(jìn)程列表);如果函數(shù)執(zhí)行成功,則返回進(jìn)程快照的句柄;否則返回INVALID_HANDLE_VALUE。第37頁(yè),共90頁(yè)。參數(shù)dwFlags的取值取 值說(shuō) 明TH32CS_SNAPALL(15,0 x0000000F)相當(dāng)于指定了TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODULE, TH32CS_SNAPPROCESS, 和 TH32CS_SNAPTHREADTH32CS_SNAPHEAPLIST(1,0 x00000001)快照中
32、包含指定進(jìn)程的堆列表TH32CS_SNAPMODULE(8,0 x00000008)快照中包含指定進(jìn)程的模塊列表TH32CS_SNAPPROCESS(2,0 x00000002)快照中包含進(jìn)程列表TH32CS_SNAPTHREAD(4,0 x00000004)快照中包含線程列表第38頁(yè),共90頁(yè)。ctype庫(kù)Python的ctype庫(kù)賦予了Python類似于C語(yǔ)言一樣的底層操作能力,導(dǎo)入ctype模塊后就可以調(diào)用CreateToolhelp32Snapshot()函數(shù)了,代碼如下:from ctypes.wintypes import *from ctypes import *調(diào)用Create
33、Toolhelp32Snapshot()函數(shù)的代碼如下:kernel32 = windll.kernel32hSnapshot = kernel32.CreateToolhelp32Snapshot(15, 0)第39頁(yè),共90頁(yè)。2Process32First()函數(shù)調(diào)用Process32First()函數(shù)可以從進(jìn)程快照中獲取第1個(gè)進(jìn)程的信息,函數(shù)原型如下:BOOL WINAPI Process32First( HANDLE hSnapshot, / 之前調(diào)用CreateToolhelp32Snapshot()函數(shù)得到的進(jìn)程快照句柄 LPPROCESSENTRY32 lppe / 包含進(jìn)程信
34、息的結(jié)構(gòu)體);如果函數(shù)執(zhí)行成功,則返回TRUE;否則返回FALSE。第40頁(yè),共90頁(yè)。結(jié)構(gòu)體LPPROCESSENTRY32typedef struct tagPROCESSENTRY32 DWORD dwSize; / 結(jié)構(gòu)體的長(zhǎng)度,單位是字節(jié) DWORD cntUsage; / 引用進(jìn)程的數(shù)量,必須為1 DWORD th32ProcessID; / 進(jìn)程標(biāo)示符(PID) DWORD th32DefaultHeapID; / 進(jìn)程的缺省堆標(biāo)識(shí)符 DWORD th32ModuleID; / 進(jìn)程的模塊標(biāo)識(shí)符 DWORD cntThreads; / 進(jìn)程中運(yùn)行的線程數(shù)量 DWORD th32P
35、arentProcessID; / 創(chuàng)建進(jìn)程的父進(jìn)程的標(biāo)識(shí)符 LONG pcPriClassBase; / 進(jìn)程創(chuàng)建的線程的優(yōu)先級(jí) DWORD dwFlags; / 未使用 TCHAR szExeFileMAX_PATH; / 進(jìn)程對(duì)應(yīng)的可執(zhí)行文件名 DWORD th32MemoryBase;/ 可執(zhí)行文件的加載地址 DWORD th32AccessKey;/ 位數(shù)組,每一位指定進(jìn)程對(duì)地址的查看權(quán)限 PROCESSENTRY32; 第41頁(yè),共90頁(yè)。結(jié)構(gòu)體tagPROCESSENTRY32class tagPROCESSENTRY32(Structure): _fields_ = (dwSi
36、ze, DWORD), (cntUsage, DWORD), (th32ProcessID, DWORD), (th32DefaultHeapID, POINTER(ULONG), (th32ModuleID, DWORD), (cntThreads, DWORD), (th32ParentProcessID, DWORD), (pcPriClassBase, LONG), (dwFlags, DWORD), (szExeFile, c_char * 260)第42頁(yè),共90頁(yè)。在Python中調(diào)用Process32First ()函數(shù)kernel32 = windll.kernel32fPr
37、ocessEntry32 = tagPROCESSENTRY32()fProcessEntry32.dwSize = sizeof(fProcessEntry32)listloop = kernel32.Process32First(hSnapshot, byref(fProcessEntry32)第43頁(yè),共90頁(yè)。3Process32Next()函數(shù)調(diào)用Process32Next()函數(shù)可以從進(jìn)程快照中獲取下一個(gè)進(jìn)程的信息,函數(shù)原型如下:BOOL WINAPI Process32Next( HANDLE hSnapshot, / 之前調(diào)用createtoolhelp32napshot()函
38、數(shù)得到的進(jìn)程快照句柄 LPPROCESSENTRY32 lppe / 包含進(jìn)程信息的結(jié)構(gòu)體);如果函數(shù)執(zhí)行成功,則返回TRUE;否則返回FALSE。第44頁(yè),共90頁(yè)。在Python中調(diào)用Process32Next()函數(shù)kernel32 = windll.kernel32fProcessEntry32 = tagPROCESSENTRY32()fProcessEntry32.dwSize = sizeof(fProcessEntry32) listloop = kernel32.Process32Next(hSnapshot, byref(fProcessEntry32)第45頁(yè),共90頁(yè)。
39、【例9-6】from ctypes.wintypes import *from ctypes import *kernel32 = windll.kernel32# 定義進(jìn)程信息結(jié)構(gòu)體class tagPROCESSENTRY32(Structure): _fields_ = (dwSize, DWORD), (cntUsage, DWORD), (th32ProcessID, DWORD), (th32DefaultHeapID, POINTER(ULONG), (th32ModuleID, DWORD), (cntThreads, DWORD), (th32ParentProcessID,
40、 DWORD), (pcPriClassBase, LONG), (dwFlags, DWORD), (szExeFile, c_char * 260)第46頁(yè),共90頁(yè)。# 獲取當(dāng)前系統(tǒng)運(yùn)行進(jìn)程的快照hSnapshot = kernel32.CreateToolhelp32Snapshot(15, 0)fProcessEntry32 = tagPROCESSENTRY32()# 初始化進(jìn)程信息結(jié)構(gòu)體的大小fProcessEntry32.dwSize = sizeof(fProcessEntry32) # 獲取第一個(gè)進(jìn)程信息listloop = kernel32.Process32First(
41、hSnapshot, byref(fProcessEntry32)while listloop: # 如果獲取進(jìn)程信息成功,則繼續(xù) processName = (fProcessEntry32.szExeFile) processID = fProcessEntry32.th32ProcessID print(%d:%s %(processID,processName) # 獲取下一個(gè)進(jìn)程信息 listloop = kernel32.Process32Next(hSnapshot, byref(fProcessEntry32)第47頁(yè),共90頁(yè)。【例9-6】的運(yùn)行結(jié)果第48頁(yè),共90頁(yè)。9.2
42、.3 終止進(jìn)程當(dāng)進(jìn)程被終止時(shí),系統(tǒng)會(huì)進(jìn)行下面的操作: 進(jìn)程中的所有線程都被標(biāo)記為“終止”狀態(tài); 分配給進(jìn)程的所有資源都會(huì)被釋放掉; 所有與該進(jìn)程相關(guān)的內(nèi)核對(duì)象都會(huì)被關(guān)閉; 從內(nèi)存中移除該進(jìn)程的代碼; 系統(tǒng)設(shè)置進(jìn)程的退出代碼; 將該進(jìn)程對(duì)象設(shè)置為“受信”(Sigaled)狀態(tài)。第49頁(yè),共90頁(yè)。TASKKILL命令的語(yǔ)法TASKKILL /S system /U username /P password /FI filter /PID processid | /IM imagename /T /F第50頁(yè),共90頁(yè)。參數(shù)說(shuō)明如下 /S system:指定要連接的遠(yuǎn)程系統(tǒng)。 /U domainu
43、ser:指定應(yīng)該在哪個(gè)用戶上下文執(zhí)行這個(gè)命令。 /P password:為提供的用戶上下文指定密碼。如果忽略,則提示輸入。 /FI filter:應(yīng)用篩選器以選擇一組任務(wù)。允許使用 *。例如,映像名稱 eq acme*。 /PID processid:指定要終止的進(jìn)程的 PID。 /IM imagename:指定要終止的進(jìn)程的映像名稱。通配符 *可用來(lái)指定所有任務(wù)或映像名稱。 /T:終止指定的進(jìn)程和由它啟用的子進(jìn)程。 /F:指定強(qiáng)制終止進(jìn)程。第51頁(yè),共90頁(yè)。【例9-7】利用TASKKILL命令來(lái)終止進(jìn)程notepad.exe,代碼如下:import os os.system(taskkil
44、l /F /IM notepad.exe)第52頁(yè),共90頁(yè)。 9.2.4 進(jìn)程池multiprocessing包是Python中的多進(jìn)程管理包。使用它可以創(chuàng)建和管理進(jìn)程池。導(dǎo)入進(jìn)程池類Pool的方法如下:from multiprocessing import Pool創(chuàng)建一個(gè)進(jìn)程池的方法如下:進(jìn)程池對(duì)象 = Pool(processes=n)n表示進(jìn)程池中可以包含的最大進(jìn)程數(shù)。第53頁(yè),共90頁(yè)。1apply_async()函數(shù)apply_async()函數(shù)用于在一個(gè)進(jìn)程池的工作進(jìn)程中異步地執(zhí)行函數(shù),并返回結(jié)果。函數(shù)原型如下:multiprocessing.Pool.apply_async(
45、func, args, kwargs, callback)參數(shù)說(shuō)明如下:func,異步地執(zhí)行的函數(shù)名。args和kwargs,func()函數(shù)的參數(shù)。callback,可調(diào)用對(duì)象,接受輸入?yún)?shù)。當(dāng)func的結(jié)果變?yōu)榭捎脮r(shí), 將立即傳遞給callback。假定apply_async()函數(shù)的返回結(jié)果是result,則可以通過(guò)調(diào)用result.successful()函數(shù)獲取整個(gè)調(diào)用執(zhí)行的狀態(tài)。如果執(zhí)行成功,則返回True;如果還有工作進(jìn)程沒(méi)執(zhí)行完,則會(huì)拋出AssertionError異常。第54頁(yè),共90頁(yè)。2關(guān)閉進(jìn)程池使用進(jìn)程池完成后,需要關(guān)閉進(jìn)程池,釋放資源。可以使用close()函數(shù)或te
46、rminate()函數(shù)關(guān)閉進(jìn)程池,close()和terminate()的區(qū)別在于close()函數(shù)會(huì)等待池中的工作進(jìn)程執(zhí)行結(jié)束再關(guān)閉進(jìn)程池,而terminate()函數(shù)則是直接關(guān)閉。第55頁(yè),共90頁(yè)。3 join()函數(shù)調(diào)用join()函數(shù)可以等待進(jìn)程池中的工作進(jìn)程執(zhí)行完畢,以防止主進(jìn)程在工作進(jìn)程結(jié)束前結(jié)束。但必join()函數(shù)必須在關(guān)閉進(jìn)程池之后使用。第56頁(yè),共90頁(yè)。【例9-8】 使用進(jìn)程池的例子。from multiprocessing import Poolfrom time import sleepimport subprocessdef f(x): retcode = sub
47、process.call(notepad.exe) sleep(1)def main(): pool = Pool(processes=3) # 最多工作進(jìn)程數(shù)為 3 for i in range(1,10): result = pool.apply_async(f, (i,) pool.close() pool.join() if result.successful(): print(successful)if _name_ = _main_: main();第57頁(yè),共90頁(yè)。9.3 多線程編程9.3.1 線程的概念第58頁(yè),共90頁(yè)。9.3.1 線程的概念線程是操作系統(tǒng)可以調(diào)度的最小執(zhí)行
48、單位,通常是將程序拆分成2個(gè)或多個(gè)并發(fā)運(yùn)行的任務(wù)。一個(gè)線程就是一段順序程序。但是線程不能獨(dú)立運(yùn)行,只能在程序中運(yùn)行。不同的操作系統(tǒng)實(shí)現(xiàn)進(jìn)程和線程的方法也不同,但大多數(shù)是在進(jìn)程中包含線程,Windows就是這樣。一個(gè)進(jìn)程中可以存在多個(gè)線程,線程可以共享進(jìn)程的資源(比如內(nèi)存)。而不同的進(jìn)程之間則是不能共享資源的。第59頁(yè),共90頁(yè)。在操作系統(tǒng)內(nèi)核中,線程可以被標(biāo)記成如下?tīng)顟B(tài)。 初始化(Init):在創(chuàng)建線程,操作系統(tǒng)在內(nèi)部會(huì)將其標(biāo)識(shí)為初始化狀態(tài)。此狀態(tài)只在系統(tǒng)內(nèi)核中使用。 就緒(Ready):線程已經(jīng)準(zhǔn)備好被執(zhí)行。 延遲就緒(Deferred ready):表示線程已經(jīng)被選擇在指定的處理器上運(yùn)行,
49、但還沒(méi)有被調(diào)度。 備用(Standby):、表示線程已經(jīng)被選擇下一個(gè)在指定的處理器上運(yùn)行。當(dāng)該處理器上運(yùn)行的線程因等待資源等原因被掛起時(shí),調(diào)度器將備用線程切換到處理器上運(yùn)行。只有一個(gè)線程可以是備用狀態(tài)。 運(yùn)行(Running):表示調(diào)度器將線程切換到處理器上運(yùn)行,它可以運(yùn)行一個(gè)線程周期(quantum),然后將處理器讓給其他線程。 等待(Waiting):線程可以因?yàn)榈却粋€(gè)同步執(zhí)行的對(duì)象或等待資源等原因切換到等待狀態(tài)。關(guān)于線程同步將在8.3小節(jié)介紹。 過(guò)渡(transition),表示線程已經(jīng)準(zhǔn)備好被執(zhí)行,但它的內(nèi)核堆已經(jīng)被從內(nèi)存中移除。一旦其內(nèi)核堆被加載到內(nèi)存中,線程就會(huì)變成運(yùn)行狀態(tài)。 終
50、止(Terminated):當(dāng)線程被執(zhí)行完成后,其狀態(tài)會(huì)變成終止。系統(tǒng)會(huì)釋放線程中的數(shù)據(jù)結(jié)構(gòu)和資源。第60頁(yè),共90頁(yè)。Windows線程的狀態(tài)切換第61頁(yè),共90頁(yè)。9.3.2 threading模塊可以引用threading模塊來(lái)管理線程,導(dǎo)入threading模塊的方法如下:import threading第62頁(yè),共90頁(yè)。1創(chuàng)建和運(yùn)行線程線程對(duì)象 = threading.Thread(target=線程函數(shù),args=(參數(shù)列表), name=線程名, group=線程組)第63頁(yè),共90頁(yè)。setDaemon()函數(shù)創(chuàng)建線程后,通常需要調(diào)用線程對(duì)象的setDaemon()方法將線程
51、設(shè)置為守護(hù)線程。主線程執(zhí)行完后, 如果還有其他非守護(hù)線程,則主線程不會(huì)退出,會(huì)被無(wú)限掛起;必須將線程聲明為守護(hù)線程之后,如果隊(duì)列中的線程運(yùn)行完了,那么整個(gè)程序不用等待就可以退出。setDaemon()函數(shù)的使用方法如下:線程對(duì)象.setDaemon(是否設(shè)置為守護(hù)線程)setDaemon()函數(shù)必須在運(yùn)行線程之前被調(diào)用。調(diào)用線程對(duì)象的start()方法可以運(yùn)行線程。第64頁(yè),共90頁(yè)。【例9-9】 線程編程的例子import threadingdef f(i): print( I am from a thread, num = %d n %(i)def main(): for i in ran
52、ge(1,10): t = threading.Thread(target=f,args=(i,) t.setDaemon(True) t.start(); if _name_ = _main_: main();第65頁(yè),共90頁(yè)。運(yùn)行結(jié)果I am from a thread, num = 1 I am from a thread, num = 7 I am from a thread, num = 8 I am from a thread, num = 9 I am from a thread, num = 2 I am from a thread, num = 3 I am from a
53、thread, num = 4 I am from a thread, num = 5 I am from a thread, num = 6第66頁(yè),共90頁(yè)。2阻塞進(jìn)程調(diào)用線程對(duì)象的join()方法可以阻塞進(jìn)程直到線程執(zhí)行完畢。函數(shù)原型如下:join(timeout=None)參數(shù)timeout指定超時(shí)時(shí)間(單位為秒),超過(guò)指定時(shí)間join就不在阻塞進(jìn)程了。第67頁(yè),共90頁(yè)?!纠?-10】import threadingdef f(i): print( I am from a thread, num = %d n %(i)def main(): for i in range(1,10):
54、 t = threading.Thread(target=f,args=(i,) t.setDaemon(True) t.start(); t.join();if _name_ = _main_: main();第68頁(yè),共90頁(yè)。程序的運(yùn)行結(jié)果如下:I am from a thread, num = 1 I am from a thread, num = 7 I am from a thread, num = 8 I am from a thread, num = 9 I am from a thread, num = 2 I am from a thread, num = 3 I am f
55、rom a thread, num = 4 I am from a thread, num = 5 I am from a thread, num = 6第69頁(yè),共90頁(yè)。3指令鎖當(dāng)多個(gè)線程同時(shí)訪問(wèn)同一資源(比如全局變量),則可能會(huì)出現(xiàn)訪問(wèn)沖突,【例9-10】 當(dāng)多個(gè)線程同時(shí)訪問(wèn)同一全局變量時(shí)出現(xiàn)訪問(wèn)沖突的例子。import threadingimport timenum =0;def f(): global num b= num time.sleep(0.0001) num=b+1 print(%s n % threading.currentThread().getName()第70頁(yè),共
56、90頁(yè)。def main(): for i in range(1,20): t = threading.Thread(target=f) t.setDaemon(True) t.start(); t.join() print(num)if _name_ = _main_: main();第71頁(yè),共90頁(yè)。程序的運(yùn)行結(jié)果如下:Thread-7 Thread-8 Thread-1 Thread-10 Thread-9 Thread-12 Thread-11 Thread-4 Thread-13 Thread-14 Thread-2 Thread-15 Thread-16 Thread-3 Thr
57、ead-17 Thread-5 Thread-18 Thread-19 Thread-6第72頁(yè),共90頁(yè)?!纠?-11】改進(jìn)【例9-10】,使用指令鎖避免多個(gè)線程同時(shí)訪問(wèn)全局變量。import threadingimport timelock = threading.Lock() # 創(chuàng)建一個(gè)指令鎖num =0;def f(): global num if lock.acquire(): print %s 獲得指令鎖. % threading.currentThread().getName() b= num time.sleep(0.0001) num=b+1 lock.release()#
58、 釋放指令鎖 print %s 釋放指令鎖. % threading.currentThread().getName() print(%s n % threading.currentThread().getName()第73頁(yè),共90頁(yè)。def main(): for i in range(1,20): t = threading.Thread(target=f) t.setDaemon(True) t.start(); t.join() print(num)if _name_ = _main_: main();第74頁(yè),共90頁(yè)。程序的運(yùn)行結(jié)果如下:Thread-1 獲得指令鎖.Thread
59、-2 獲得指令鎖.Thread-1 釋放指令鎖.Thread-2 釋放指令鎖.Thread-3 獲得指令鎖.Thread-4 獲得指令鎖.Thread-3 釋放指令鎖.Thread-4 釋放指令鎖.Thread-5 獲得指令鎖.Thread-6 獲得指令鎖.Thread-5 釋放指令鎖.Thread-7 獲得指令鎖.Thread-6 釋放指令鎖.Thread-8 獲得指令鎖.Thread-7 釋放指令鎖.Thread-9 獲得指令鎖.Thread-8 釋放指令鎖.Thread-10 獲得指令鎖.Thread-9 釋放指令鎖.第75頁(yè),共90頁(yè)。Thread-11 獲得指令鎖.Thread-10
60、 釋放指令鎖.Thread-12 獲得指令鎖.Thread-11 釋放指令鎖.Thread-13 獲得指令鎖.Thread-12 釋放指令鎖.Thread-14 獲得指令鎖.Thread-13 釋放指令鎖.Thread-15 獲得指令鎖.Thread-14 釋放指令鎖.Thread-15 釋放指令鎖.Thread-16 獲得指令鎖.Thread-17 獲得指令鎖.Thread-16 釋放指令鎖.Thread-17 釋放指令鎖.Thread-18 獲得指令鎖.Thread-18 釋放指令鎖.Thread-19 獲得指令鎖.Thread-19 釋放指令鎖.19第76頁(yè),共90頁(yè)。4可重入鎖使用指令
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 借資產(chǎn)合同范本
- 2025年度DAF運(yùn)輸合同下的貨物運(yùn)輸保險(xiǎn)責(zé)任劃分
- 使用土地建房合同范例
- 個(gè)人傭金協(xié)議合同范例
- 2024-2030年中國(guó)掃描聲學(xué)顯微鏡(SAM)行業(yè)發(fā)展監(jiān)測(cè)及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 上門宴席服務(wù)合同范例
- 勞保服合同范本
- 農(nóng)村房屋征收合同范本
- 2025年度教育培訓(xùn)機(jī)構(gòu)經(jīng)營(yíng)權(quán)承包合同范本
- 2025年度節(jié)能減排產(chǎn)品銷售代理合同樣本
- 江蘇省鹽城市鹿鳴路初級(jí)中學(xué)2024-2025學(xué)年八年級(jí)上學(xué)期期末考試語(yǔ)文試題(含答案)
- 《反家庭暴力》課件
- 【物理】《跨學(xué)科實(shí)踐:制作簡(jiǎn)易桿秤》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教版(2024)初中物理八年級(jí)下冊(cè)
- 新蘇教版一年級(jí)數(shù)學(xué)下冊(cè)第六單元《簡(jiǎn)單的數(shù)量關(guān)系(一)》教案(共2課時(shí))
- GA/T 2146-2024法庭科學(xué)涉火案件物證檢驗(yàn)移動(dòng)實(shí)驗(yàn)室建設(shè)通用要求
- 2024-2025學(xué)年成都市石室聯(lián)中七年級(jí)上英語(yǔ)期末考試題(含答案)
- 2025年度服務(wù)外包合同:銀行呼叫中心服務(wù)外包協(xié)議3篇
- 【課件】跨學(xué)科實(shí)踐制作微型密度計(jì)++課件人教版物理八年級(jí)下冊(cè)
- 北師大版五年級(jí)數(shù)學(xué)下冊(cè)第4課時(shí)體積單位的換算課件
- 電解質(zhì)溶液的圖像分析(原卷版)-2025年高考化學(xué)一輪復(fù)習(xí)講義(新教材新高考)
- 2025年中考?xì)v史一輪復(fù)習(xí)知識(shí)清單:隋唐時(shí)期
評(píng)論
0/150
提交評(píng)論