程序的注意點

2021-10-05 08:51:14 字數 2853 閱讀 8455

學習目標

能夠說出程序的注意點

程序的注意點介紹

程序之間不共享全域性變數

主程序會等待所有的子程序執行結束再結束

程序之間不共享全域性變數

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年,德州儀器為推動中國創新半導體技術的發展,幫助工程師提高生產力並激發新設計。特邀請國內頂尖專家在全國舉辦技術培訓研討會,與您分享最新的研發案例和堵門設計技巧,為您提供最前沿的積水昂街和深度剖析沒在培訓中,阿三搜尋空間開...