學習目標
能夠說出程序的注意點
程序的注意點介紹
程序之間不共享全域性變數
主程序會等待所有的子程序執行結束再結束
程序之間不共享全域性變數
import multiprocessing
import time
g_list = list()
# **執行到此,說明資料新增完成
print("add_data:", g_list)
def read_data():
print(「read_data」, g_list)
ifname== 『main』:
# 建立新增資料的子程序
add_data_process = multiprocessing.process(target=add_data)
# 建立讀取資料的子程序
read_data_process = multiprocessing.process(target=read_data)
# 啟動子程序執行對應的任務
add_data_process.start()
# 主程序等待新增資料的子程序執行完成以後程式再繼續往下執行,讀取資料
add_data_process.join()
read_data_process.start()
print("main:", g_list)
# 總結: 多程序之間不共享全域性變數
執行結果:
add: 0
add: 1
add: 2
add: 3
add: 4
add_data: [0, 1, 2, 3, 4]
main:
read_data
程序之間不共享全域性變數的解釋效果圖:
程序關係
程序之間不共享全域性變數的小結
建立子程序會對主程序資源進行拷貝,也就是說子程序是主程序的乙個副本,好比是一對雙胞胎,之所以程序之間不共享全域性變數,是因為操作的不是同乙個程序裡面的全域性變數,只不過不同程序裡面的全域性變數名字相同而已。
主程序會等待所有的子程序執行結束再結束
假如我們現在建立乙個子程序,這個子程序執行完大概需要2秒鐘,現在讓主程序執行0.5秒鐘就退出程式,檢視一下執行結果,示例**如下:
import multiprocessing
import time
def task():
for i in range(10):
print(「任務執行中…」)
time.sleep(0.2)
ifname== 『main』:
# 建立子程序
sub_process = multiprocessing.process(target=task)
sub_process.start()
# 主程序延時0.5秒鐘
time.sleep(0.5)
print("over")
exit()
# 總結: 主程序會等待所有的子程序執行完成以後程式再退出
執行結果:
任務執行中…
任務執行中…
任務執行中…
over
任務執行中…
任務執行中…
任務執行中…
任務執行中…
任務執行中…
任務執行中…
任務執行中…
說明:通過上面**的執行結果,我們可以得知: 主程序會等待所有的子程序執行結束再結束
假如我們就讓主程序執行0.5秒鐘,子程序就銷毀不再執行,那怎麼辦呢?
我們可以設定守護主程序或者在主程序退出之前讓子程序銷毀
守護主程序:
守護主程序就是主程序退出子程序銷毀不再執行
子程序銷毀:
子程序執行結束
保證主程序正常退出的示例**:
import multiprocessing
import time
def task():
for i in range(10):
print(「任務執行中…」)
time.sleep(0.2)
ifname== 『main』:
# 建立子程序
sub_process = multiprocessing.process(target=task)
# 設定守護主程序,主程序退出子程序直接銷毀,子程序的生命週期依賴與主程序
# sub_process.daemon = true
sub_process.start()
time.sleep(0.5)
print("over")
# 讓子程序銷毀
sub_process.terminate()
exit()
# 總結: 主程序會等待所有的子程序執行完成以後程式再退出
# 如果想要主程序退出子程序銷毀,可以設定守護主程序或者在主程序退出之前讓子程序銷毀
執行結果:
任務執行中…
任務執行中…
任務執行中…
over
5. 主程序會等待所有的子程序執行結束再結束的小結
為了保證子程序能夠正常的執行,主程序會等所有的子程序執行完成以後再銷毀,設定守護主程序的目的是主程序退出子程序銷毀,不讓主程序再等待子程序去執行。
設定守護主程序方式:子程序物件.daemon = true
銷毀子程序方式:子程序物件.terminate()
多程序的注意點
子程序相當於複製了乙份主程序,和主程序是不同的。所以在子程序裡執行的操作和主程序沒關係。和其他子程序也沒有關係 子程序.join 新增資料程序 add data process multiprocessing.process target add data 讀取資料程序 read data proc...
ExecuteNonQuery 的注意點
最近忙個專案,在查詢某個表中是否有資料的時候,我用了executenonquery 並通過判斷值是否大於0來判斷資料的存在與否。結果與我所設想的很不一致,除錯時才發現,其執行後返回的結果是 1,對此我很是不理解,回頭查了下資料,如下顯示 sqlcommand.executenonquery 方法對連...
UITextView的注意點
cell.label.text 會議介紹 cell.text text 2015年,德州儀器為推動中國創新半導體技術的發展,幫助工程師提高生產力並激發新設計。特邀請國內頂尖專家在全國舉辦技術培訓研討會,與您分享最新的研發案例和堵門設計技巧,為您提供最前沿的積水昂街和深度剖析沒在培訓中,阿三搜尋空間開...