關於多程序和檔案寫入

2021-09-29 12:42:28 字數 1303 閱讀 1473

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函式建立子程序...

程序 記憶體和檔案

程序是作業系統裡面的核心概念。它指的是乙個運動中的程式。從名字上看,程序表示的就是進展中的程式。乙個程式一旦在計算機裡執行起來,它就稱為乙個程序。作業系統對程序的管理通過程序表來實現。程序表裡存放的是關於程序的一切資訊。在任何時候,程序所占有的全部資源,包括分配給該程序的記憶體,核心資料結構和軟資源...