지수팀 task
(웹) 통합요청 -> 상혁이 코드(->Domestic) ----keyid, fid----> sh 코드(통합 전문가 지수, 시작점) ---8개로multiprocessing---class---> 전문가지수(토퍼,종훈) -> factorInfo 에 넣으면
(웹) 통합요청 <-> factorInfo
로 가도록 함
그 다음이 정규화
[intergratingAnalyzer] 코드
from threading import Thread
import threading
class intergratingAnalyzer(threading.Thread):
# client = MongoClient('localhost:27017', connect=False)
# db = None
# dt = datetime.datetime.now()
def __init__(self, _keyId, _fid, _query, _start, _end, _total):
threading.Thread.__init__(self)
self.keyId = _keyId
self.fid = _fid
self.defaultScore = 0.02
self.start = _start
self.end = _end
self.total = _total
self.query = _query
def run(self):
print("---------------------")
print(self.start)
print(self.end)
print(self.total)
print("---------------------")
class 함수를 이용해서 intergratingAnalyzer를 만들어 주었다. (필요할 때 import intergratingAnalyzer 해서 사용하면 된다) 클래스 함수 처음 써봄..
class 안에 사용자 지정 함수인 def 사용해주어서 변수를 지정해주었다.
__init__ 함수는 self랑 짝이어서 항시 사용해주고, 최초로 호출을 해준다.
class
def __init__(self, ..)
def run(self):
은 코드를 실행해주는 부분이다.
start 와 end를 찍어보라고 하셨는데 그게 무슨 뜻인지를 잘 몰랐다.
간단히 run으로 지정해주고
print("-------------")
를 해줌으로써 구분을 시켜주고
print(self.start)
print(self.end)
를 통해 잘 실행이 되는지 찍어본다
print(self.total)
print("--------------")
로 마무리 잘 돌아가나 확인
(비주얼코드에서 희한하게 막혀서 아톰으로 해주니 코드가 잘 실행이 된다. 아톰에 파이썬 설치하기!)
[sh.py] 코드
from pymongo import MongoClient
from multiprocessing import Process
import multiprocessing
from intergratingAnalyzer import intergratingAnalyzer
client = MongoClient('203.255.92.141:27017', connect=False)
id = client['ID']
domestic = client['ID']['Domestic']
keyId = 588
authorSize = domestic.count_documents({"fid":0, "keyId" :keyId})
th = 100 # each core handle 100 or more data
sizeDict = {}
cores = multiprocessing.cpu_count()
if cores > 3:
cores -= 1
perData = int(authorSize / cores)
if perData > th :
last = 0
for i in range(cores-1) :
sizeDict[last] = last+perData
last += perData
sizeDict[last] = authorSize
else :
sizeDict[0] = authorSize
#정규화 초기화 과정 있음.
processList = []
for i in sizeDict :
acl = intergratingAnalyzer(keyId, 0, "test", i, sizeDict[i], authorSize)
p = Process(target= acl.run)
processList.append(p)
print(p)
p.start()
#기다리는거..
for p in processList :
p.join()
import multiprocessing
요 부분도 multiprocessing 이 없다고 하니 바로 import 해주셨다.
from intergratingAnalyzer import intergratingAnalyzer
앞전에 만든 통합분석기를 가져와서(from) import 해주었다.
authorSize = domestic.count_documents({"fid":0, "keyId" :keyId})
실행해보니 이 부분에서 에러가 나왔다,
error domestic.count_documents 로 바꾸라고 하니 박사님께서 바로 복붙해서 코드를 수정하셨다.
client = MongoClient('203.255.92.141:27017', connect=False)
해서 몽고db와 연결하고
keyId = 588
를 여서 주니
authorSize = domestic.count_documents({"fid":0, "keyId" :keyId})
여기서 "keyId" :keyId 부분에서 588로 넣어주지 안코, keyId로 넣어주었다. ("fid: " 는 "0"으로 넣어줌)
cores = multiprocessing.cpu_count()
if cores > 3:
cores -= 1
에서는 코어의 갯수로 멀티프로세싱을 해주기 위해서 세어주는 함수를 추가해주었다
코어가 쿼드코어 이상일 경우에는 -1로 해주어서 과부하를 방지한다
perData = int(authorSize / cores)
각 페이지에는 멀티프로세싱해준 데이터의 갯수가 들어가도록 int 처리해준다
for i in range(cores-1) :
range는 0부터 세어 주기 때문에 실제 갯수보다 -1 해주어서 입력해준다
processList = []
for i in sizeDict :
acl = intergratingAnalyzer(keyId, 0, "test", i, sizeDict[i], authorSize)
[]빈리스트로 지정해주고
통합분석기 변수대로, keyId=588로 지정해주어서 그냥 keyId로 넣어주고
fid=0으로 지정해주고
_query 는 "test"로 지정해주고
_start 는 i 로
_end 는 sizeDict[i] 로
_total 은 authorSize 로 넣어준다.
p = Process(target= acl.run)
p가 run 하도록 해주고
p.start()
여기가 시작점이다
for p in processList :
p.join()
.join() 함수를 써주는 것은 8개가 나뉘어져서 데이터가 전처리되는데 데이터 읽는 속도가 8개가 다 다를 것이 아닌가
동시에 끝날 때까지 기다려주는 함수가 바로 join 함수다~
'2021-1 > Expert' 카테고리의 다른 글
Expert | 데이터 csv 파일 만드는 중 (0) | 2021.12.29 |
---|---|
Expert | No module named Error 해결하기 (0) | 2021.12.27 |
python에서도 multiprocessing을 사용해야 하는 이유 (0) | 2021.12.14 |
Expert | rawdata 코드 수정 (0) | 2021.12.13 |
Expert | Analyzer code 이해부터 먼저하기 (0) | 2021.12.13 |