python提供了多個模組用於建立程序。比如os.fork()(適用於linux/unix/mac),和multiprocessing模組和pool程序池。
multiprocessing模組提供了乙個process類來代表乙個程序物件,語法如下:
使用的為可選引數
引數說明:
group:引數未使用,值始終未none
target:表示當前程序啟動時執行的可呼叫物件
name:為當前程序賦予別名
args:表示傳遞給target的引數元組
kwargs:表示傳遞給target函式的引數字典
例項
from multiprocessing import process
# 子程序**
deftest
(interval)
:print
("我是子程序"
)# 執行主程序
defmain()
:print
("主程序開始"
) p = process(target=test, args=(1
,)) p.start(
)print
("主程序結束"
)if __name__ ==
'__main__'
: main(
)
**分析:
上述**先例項化process類,然後使用p.start()方法啟動子程序,開始執行test()函式。
process的例項有如下常用方法:
start():啟動程序例項
is_alive():判斷程序例項是否還在執行。
join([timeout]):執行緒同步,即主線程任務結束之後,進入阻塞狀態,一直等待其他的子執行緒執行結束之後,主線程再終止
run():r如果沒有給定target引數,對這個物件呼叫start()的時候,就將執行物件中的run()方法
process類還有如下常用屬性:
name:當前程序例項別名,預設為process-n,n為從1開始遞增的整數
pid:當前程序例項的pid值
建立2個子程序,分別使用os模組和time模組輸出父程序和子程序的id以及紫禁城的時間,並且呼叫process類的name和pid屬性,**如下:
from multiprocessing import process
import time
import os
# 兩個子程序會呼叫的兩個方法
defchild_1
(interval)
:print
("子程序(%s)開始執行,父程序為(%s)"
%(os.getpid(
), os.getppid())
) t_start = time.time(
)# 計時開始
time.sleep(interval)
# 程式將會被掛起interval秒
t_end = time.time(
)print
("子程序(%s)執行時間為'0.2f'秒"
%(os.getpid())
, t_end - t_start)
defchild_2
(interval)
:print
("子程序(%s)開始執行,父程序為(%s)"
%(os.getpid(
), os.getppid())
) t_start = time.time(
)# 計時開始
time.sleep(interval)
# 程式將會被掛起interval秒
t_end = time.time(
)print
("子程序(%s)執行時間為'0.2f'秒"
%(os.getpid())
, t_end - t_start)
if __name__ ==
'__main__'
:print
("----------父程序開始執行---------"
)print
("父程序pid:%s"
% os.getpid())
p1 = process(target=child_1, args=(1
,)) p2 = process(target=child_2, name=
"python"
, args=(2
,)) p1.start(
) p2.start(
)# 同時父程序仍然往下執行,如果p2程序還在執行,將會返回true
print
("p1.is_alive=%s"
% p1.is_alive())
print
("p2.is_alive=%s"
% p2.is_alive())
# 輸入p1和p2程序的別名和pid
print
("p1.name=%s"
% p1.name)
print
("p1.pid=%s"
% p1.pid)
print
("p2.name=%s"
% p2.name)
print
("p2.pid=%s"
% p2.pid)
print
("------等待子程序----------"
) p1.join(
) p2.join(
)print
("---------父程序執行結束--------"
)
上述**中,第一次例項化process類的時候,會為name屬性預設賦值為process-1,第二次則預設為process-2,但是由於在例項化程序p2的時候,設定了name屬性為python,所以p2.name的值為python而不是process-2 python python中的遍歷
遍歷list集合 infp 1,2,3,3,3 for m in infp print m 值得注意的是,m在此處的值是infp中的想對應的值,當我們通過del infp m 或者 infp.remove m 如下 infp 1,2,3,3,3 for m in infp if m is 3 pri...
python python中的urllib模組
import urllib.request response urllib.request.urlopen html response.read decode utf 8 print html 指定請求頭的方式 import urllib.request url headers request ur...
初學python python中的self
python中類的方法和普通函式的區別就是 它們必須有乙個額外的第乙個引數。一般情況下該引數以self命名,也可以換成其他名字,不過會降低程式的可讀性。self代表類的例項,python會對self進行賦值,而程式設計師不需要對self賦值。舉個例子來說明,myclass類例項化得到myobject...