python(21)實現多程序(1)

2022-05-06 07:57:12 字數 2035 閱讀 6528

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):

print

"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()))

print

"msg:

", msg

write(x,y)

time.sleep(3)

print

"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,當乙個程序執行完畢後會新增新的程序進去

print

"mark~ mark~ mark~~~~~~~~~~~~~~~~~~~~~~

"pool.close()

pool.join()

#呼叫join之前,先呼叫close函式,否則會出錯。執行完close後不會有新的程序加入到pool,join函式等待所有子程序結束

print

"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,無條件停牌 如果莊家大...