python多程序:multiprocessing
python中的多執行緒其實並不是真正的多執行緒,如果想要充分使用多核cpu的資源,在python中大部分情況下還是多程序。python提供了非常好用的多程序包multiprocessing,只需要定義乙個函式,python會完成其他所有事情。借助這個包,可以輕鬆完成從單程序到併發執行的轉換。multiprocessing支援子程序、通訊和共享資料、執行不同形式的同步,提供了process、queue、pipe、lock等元件。
建立程序的類:process([group [, target [, name [, args [, kwargs]]]]]),target表示呼叫物件,args表示呼叫物件的位置引數元組。kwargs表示呼叫物件的字典。name為別名。group實質上不使用。
方法:is_alive()、join([timeout])、run()、start()、terminate()。其中,process以start()啟動某個程序。
屬性:authkey、daemon(要通過start()設定)、exitcode(程序在執行時為none、如果為–n,表示被訊號n結束)、name、pid。其中daemon是父程序終止後自動終止,且自己不能產生新程序,必須在start()之前設定。
**:多程序實現
#coding: utf-8
import
multiprocessing
import
time
import
ospath = "
d:\\test_data\\xc\\
"def
write(x,y):
"tttttttt
"path = path + "
test
"+"_
" + str(x) + "
_" +str(y)
ifnot
os.path.exists(path):
os.makedirs(path)
for i in range(1,x):
f = open(path + "
\\" + str(i) + "
.txt
", 'w'
) time.sleep(1)
f.write(
"sdaffffffffffsdfsdfsdfadfa
" + '\n'
) f.close()
deffunc(msg,x,y):
print("
the time is
".format(time.ctime()))
"msg:
", msg
write(x,y)
time.sleep(3)
"end"if
__name__ == "
__main__":
pool = multiprocessing.pool(processes = 5) #
規定最多有5個程序同時跑
for i in range(1,10): #
產生10個程序
x = i*5y = x+5msg = "
hello %d
" %(i)
time.sleep(1)
#維持執行的程序總數為processes,當乙個程序執行完畢後會新增新的程序進去
"mark~ mark~ mark~~~~~~~~~~~~~~~~~~~~~~
"pool.close()
pool.join()
#呼叫join之前,先呼叫close函式,否則會出錯。執行完close後不會有新的程序加入到pool,join函式等待所有子程序結束
"sub-process(es) done.
"
Python實現多程序
python可以實現多執行緒,但是因為global interpreter lock gil python的多執行緒只能使用乙個cpu核心,即乙個時間只有乙個執行緒在執行,多執行緒只是不同執行緒之間的切換,對多核cpu來說,就是巨大的浪費。如4核cpu,實際上只利用了乙個核,cpu利用率只有25 要...
python 實現多程序
方法一 from urllib import request from multiprocessing import process import os def url,kwargs print 當前程序id os.getpid os.getppid os.getpid 獲取當前程序id,os.ge...
Python 21點小遊戲
建立一副撲克牌 建立莊家 計算機 和玩家 我 發牌 莊家1張,玩家2張 玩家根據自己的牌面與莊家的牌面來選擇是否要牌?詢問方式 如果玩家要牌,則繼續發牌,發牌後判斷是否爆牌。如果爆牌,則玩家負 如果玩家停牌,則莊家開始要牌。如果莊家小於17點,無條件要牌 如果牌面 17,21,無條件停牌 如果莊家大...