程序與執行緒通訊

2021-09-25 03:30:24 字數 2326 閱讀 2633

程序:

'''

定義乙個全域性變數g_num,分別建立2個子程序對g_num執行不同的操作,並輸出操作後的結果

'''from multiprocessing import process

def plus():

print('--------子程序1開始--------')

global g_num # 宣告它是全域性變數

g_num += 50

print('g_num is %d' % g_num)

print('--------子程序1結束--------')

def minus():

print('--------子程序2開始--------')

global g_num # 宣告它是全域性變數

g_num -= 50

print('g_num is %d' % g_num)

print('--------子程序2結束--------')

g_num = 100 # 主程序初始值100

if __name__ == '__main__':

print('--------主程序開始--------')

print('g_num is %d' % g_num)

p1 = process(target=plus) #例項化程序1

p2 = process(target=minus()) # 例項化程序2

p1.start() # 開始程序1

p2.start() # 開始程序2

p1.join() # 等待程序1結束

p2.join() # 等待程序2結束

print('--------主程序結束--------')

在上述**中,分別建立了2個子程序,乙個子程序中令g_num加上50,另乙個子程序令g_num減少50,但是從執行結果可以看出,g_num在父程序和2個子程序中的初始值都是100,也就是全域性變數g_num在乙個程序中的結果,沒有傳遞到下乙個程序中,就是程序之間沒有共享資訊。

執行緒:

'''

證明執行緒之間可以通訊:

定義乙個全域性變數g_num.分別建立2個子執行緒對g_num執行不同的操作,並輸出

操作後的結果

'''from threading import thread

import time

def plus(): # 帶乙個執行緒函式

print('--------子執行緒1開始--------')

global g_num # 定義全域性變數

g_num += 50 #全域性變數值增加50

print('g_num is %d' % g_num)

print('--------子執行緒1結束--------')

def minus(): # 第二個執行緒函式

time.sleep(1) #休眠1秒

print('--------子執行緒2開始--------')

global g_num # 定義全域性變數

g_num -= 50 # 全域性變數值減少50

print('g_num is %d' % g_num)

print('--------子執行緒2結束--------')

g_num = 100 # 定義乙個全域性變數

if __name__ == '__main__':

print('--------主線程開始--------')

print('g_num is %d' % g_num)

t1 = thread(target=plus) # 例項化執行緒t1

t2 = thread(target=minus) # 例項化執行緒t2

t1.start() # 開啟執行緒1

t2.start() # 開啟執行緒2

t1.join() # 等待執行緒1結束

t2.join() # 等待執行緒2結束

print('--------主線程結束--------')

上述**中,定義乙個全域性變數g_num的值是100,然後建立2個執行緒,乙個執行緒將g_num的值增加50,乙個執行緒將g_num的值減少50,如果g_num的最終結果是100,則說明執行緒之間可以共享資料。

從例子來看,在乙個程序內的所有執行緒共享全域性變數,能夠在不使用其它方式的前提下完成多執行緒之間的資料共享。

程序通訊方式 與 執行緒通訊方式

程序通訊方式 與 執行緒通訊方式 程序通訊方式 7種 管道pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。命名管道fifo 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊息佇列messagequeue...

程序與執行緒的區別 程序的通訊方式 執行緒的通訊方式

程序與執行緒的區別 通俗的解釋 乙個系統執行著很多程序,可以比喻為一條馬路上有很多馬車 不同的程序可以理解為不同的馬車 而同一輛馬車可以有很多匹馬來拉 這些馬就是執行緒 假設道路的寬度恰好可以通過一輛馬車 道路可以認為是臨界資源 那麼馬車成為分配資源的最小單位 程序 而同乙個馬車被很多匹馬驅動 執行...

初探 程序通訊與執行緒同步

不推薦使用signal 介面,推薦使用sigacton 相關介面 訊號集處理函式 int sigemptyset sigset t set int sigfillset sigset t set int sigdelset sigset t set,int signo int sigmember s...