aminer資料很大
,所以用了多程序
,第一次用這個
,記錄以下小問題
,以後可以直接copy
關鍵是解決資料劃分、加鎖和解鎖、程序數目設定的問題
import argparse
from multiprocessing import process, lock
import os, time
# 我要用多程序呼叫metapath_based_randomwalk這個函式,並將計算得到的結果(資料量相對小呀)寫入檔案
self.outfile = open(kargs.get('outfile_name'), 'w')
print("本機為", os.cpu_count(), "核 cpu")
start = time.time()
lock = lock() # 這裡寫入檔案,要加鎖
for i in range(6): # 因為計算密集型的,所以6核cpu開6個程序
p = process(target=self.metapath_based_randomwalk, args=(i,lock)) #多程序,要為每個程序制定對應資料,lock這裡傳參,引數要元組形式args=(i,)這樣的
p.start()
for p in l:
p.join()
stop = time.time()
print("i/0密集型任務,多程序耗時 %s" % (stop - start))
self.outfile.close()
def metapath_based_randomwalk(self , process_number, lock):
# ...
# 下面將資料劃分處理
num_per_thread = (asize-1)/6+1 # 6是程序數呢-->得到每個程序處理資料的數量
start_a = int(num_per_thread * process_number) # 從這個開始
end_a = int(min(num_per_thread * (process_number+1), asize)) # 到這個之前結束
# ...
# ...
# 寫檔案:
lock.acquire()
self.outfile.write('...')
self.outfile.write('\n')
self.outfile.flush() # !要清緩衝區呀,否則緩衝區裡那些就直接沒了
lock.release()
多程序檔案共享
一種方法是使用檔案鎖,利用fcntl函式對於檔案進行加鎖解鎖操作,以達到互斥訪問的目的,但是在控制時需要注意程序之間的關係,在有多個程序和共享資源時,應注意死鎖的避免。上乙個最開始寫的程式吧,簡單,就是兩個程序互斥訪問檔案。include include include include void r...
多程序檔案拷貝
下面用程式實現這樣的功能 有乙個檔案的內容需要拷貝到另乙個檔案中,以前的做法是用乙個程序來完成,下面要做的是,是兩個程序同時做這件事,乙個程序負責一半,如父程序負責拷貝檔案的前半段,子程序負責拷貝檔案的後半段。下面看一下程式的流程以及需要注意的問題 其中 要注意的是當父程序呼叫fork函式建立子程序...
程序 記憶體和檔案
程序是作業系統裡面的核心概念。它指的是乙個運動中的程式。從名字上看,程序表示的就是進展中的程式。乙個程式一旦在計算機裡執行起來,它就稱為乙個程序。作業系統對程序的管理通過程序表來實現。程序表裡存放的是關於程序的一切資訊。在任何時候,程序所占有的全部資源,包括分配給該程序的記憶體,核心資料結構和軟資源...