main程序下,建立多個執行緒,同一程序下執行緒可以共享位址空間,全域性變數
同一程序下執行緒共享那些資源
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import random
import time
from multiprocessing import queue, process
import threading
q = queue(
)# 寫資料程序執行的**
defproc_write
(urls)
:print
('process is write....'
)for url in urls:
q.put(url)
print
('put %s to queue... '
% url)
time.sleep(random.random())
# 讀資料程序的**
defproc_read()
:print
('process is reading...'
)while
true
: url = q.get(
true
)print
('get %s from queue'
% url)
if __name__ ==
'__main__'
:# 父程序建立queue,執行緒共享程序資源
proc_write1 = threading.thread(target=proc_write, args=([
'url_1'
,'url_2'
,'url_3'],
))proc_write2 = threading.thread(target=proc_write, args=([
'url_4'
,'url_5'
,'url_6'],
))proc_reader = threading.thread(target=proc_read, args=()
)# 啟動子程序,寫入
proc_write1.start(
) proc_write2.start(
) proc_reader.start(
)# 等待proc_write1結束
proc_write1.join(
) proc_write2.join(
)# proc_raader程序是死迴圈,強制結束
proc_reader.terminate(
)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import random
import time
from multiprocessing import queue, process
# 寫資料程序執行的**
defproc_write
(q, urls)
:print
('process is write....'
)for url in urls:
q.put(url)
print
('put %s to queue... '
% url)
time.sleep(random.random())
# 讀資料程序的**
defproc_read
(q):
print
('process is reading...'
)while
true
: url = q.get(
true
)print
('get %s from queue'
% url)
if __name__ ==
'__main__'
:# 父程序建立queue,並傳給各個子程序
q = queue(
) proc_write1 = process(target=proc_write, args=
(q,[
'url_1'
,'url_2'
,'url_3'],
))proc_write2 = process(target=proc_write, args=
(q,[
'url_4'
,'url_5'
,'url_6'],
))proc_reader = process(target=proc_read, args=
(q,)
)# 啟動子程序
proc_write1.start(
) proc_write2.start(
) proc_reader.start(
)# 等待proc_write1結束
proc_write1.join(
) proc_write2.join(
)# proc_reader.join()
# proc_raader程序是死迴圈,強制結束
# proc_reader.terminate()
輸出結果:
上面**中,如果不手動往程序傳入共享的乙個佇列q,而是在**中宣告乙個全域性變數q,reader程序是不能讀取到內容的,可見父程序下子程序通訊,必須手動傳入執行緒安全的資料結構。各個子程序並不能共享父程序的資源。
共享記憶體(對複雜資料結構支援不好)
分布式程序通訊
python執行緒 程序間通訊
from multiprocessing import process import os def get process info print info nix系統才有getpid及getppid方法 print process id os.getpid print parent process ...
程序與執行緒通訊
程序 定義乙個全域性變數g num,分別建立2個子程序對g num執行不同的操作,並輸出操作後的結果 from multiprocessing import process def plus print 子程序1開始 global g num 宣告它是全域性變數 g num 50 print g n...
程序與執行緒的區別 程序的通訊方式 執行緒的通訊方式
程序與執行緒的區別 通俗的解釋 乙個系統執行著很多程序,可以比喻為一條馬路上有很多馬車 不同的程序可以理解為不同的馬車 而同一輛馬車可以有很多匹馬來拉 這些馬就是執行緒 假設道路的寬度恰好可以通過一輛馬車 道路可以認為是臨界資源 那麼馬車成為分配資源的最小單位 程序 而同乙個馬車被很多匹馬驅動 執行...