python多進程編程的一點積累

在python中進行多進程編程,咱們一般使用multiprocessing這個python官方的多進程庫,可是聽說有不少其餘更好的庫可以使用,有許多新的特性例如守護進程等,不過今天我只講比較簡單原始的multiprocessing。python

話很少說,直接上代碼:編程

def calcuvalue_main(arg1,arg2,arg3):
	'''計算函數'''
	valuelist = []
	for word in arg1:
		#計算結果
		pass
	return valuelist

def pos_value_main(pos_words,neg_seedwords):
	'''多進程計算函數'''
	core_count = multiprocessing.cpu_count()
	pool = multiprocessing.Pool(core_count)

	result = []

	res = {}

	pos_words_list = cutlist(pos_words) #將待算的輸入列表切分爲多個小列表

	for index, pos_words in enumerate(pos_words_list):
		#將全部小列表分配到各個進程,返回的是一個個結果列表
		res[index] = pool.apply_async(calcuvalue_main, (pos_words, pos_seedwords, neg_seedwords))

	pool.close()
	pool.join()

	for i in res:
		#本條計算完畢
		real_res = res[i].get()
		for k in real_res:
			result.append(k)

	return result

首先肯定你的程序是否適合多進程執行,若是適合,使用multiprocessing開啓多個進程,將你的輸入切分爲多塊,分塊投入到各個進程中執行。app

注意:切分塊的大小要適當調整,若是過小,單個進程的計算強度不夠,cpu在調度的時候,就不會打滿,會出現多個進程爭奪時間片的狀況,調整適當可以充分利用cpu。async

相關文章
相關標籤/搜索