import struct import time import threading import pycurl import re import os from StringIO import StringIO from multiprocessing import Process,current_process,Pool,freeze_support up= lambda x:struct.unpack("<L",x) #Big Endian p=lambda x:struct.pack(">L",x) #Little Endian class KMS(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): print "Call Thread" def mp(number): #proc_name = current_process().name result = number * 2 proc = os.getpid() print('{0} doubled to {1} by process id: {2}'.format( number, result, proc)) def pycurl_test(): try: buffer = StringIO() c = pycurl.Curl() c.setopt(c.URL, 'http://vuln.kr') c.setopt(c.POST, True) c.setopt(c.SSL_VERIFYPEER, False) c.setopt(c.WRITEFUNCTION,buffer.write) #c.setopt(c.HTTPHEADER, []) c.perform() body = buffer.getvalue() except Exception as e: pass finally: if c!=None: c.close() if buffer!=None: buffer.close() return 200,body if __name__ == '__main__': freeze_support() # for MultiProcess without Fork Function try: a=KMS() #MultiThread Code a.start() numbers = [5, 10, 15, 20, 25] #MultiProcess Code procs = [] for index, number in enumerate(numbers): proc = Process(target=mp, args=(number,)) procs.append(proc) proc.start() for proc in procs: proc.join() print pycurl_test() # PyCurl Code raise Exception("Something Exception") except Exception as e: print "Exception: {0}".format(e)
MultiProcess , MultiThread 예제코드 및 PyCurl 에 대해서 싣혀있는 코드를 올린다.
1. pycurl
PyCurl은 "pip install pycurl" 로 설치할 수 있다. PyCurl 에 대해서 말하자면 requests 모듈보다는 가독성도 좋고 사용하기 편리하지만! PyCurl이 속도가 더 빠르므로 필요시 사용할 수 있다. 가독성이 문제라면 관련된 모듈을 만들어서 사용하자.
2. multiprocessing
if __name__ == '__main__':
freeze_support()
위를 정의해주고 사용해야한다. IDLE로는 멀티프로세스가 구동되지도 않는 버그가 있는것같은데, 잘 모르겠다.
하나하나 찾아볼 용기가 나지않는다....T^T
알아낸것은 프로세스가 생성되면서 if __name__ ~~ 바깥에 있는 코드는 생성된 수대로 동작한다는 점이다.
설명이 어렵지만 직접사용해보면 안다 ;;
3. multithread
파이썬은 아쉽게도 multithread를 지원하지 않는다.
이 모듈은 그렇게 보여주게 하는셈인것으로 볼 수 있다.
컨텍스트 스위칭(cpu가 작업 요리갓다 저리갓다하는거) 가 많이 일어나서 굳이 사용해야할까 싶지만
네트워크와 관련된 작업을 할때에는 네트워크 지연시간동안 다른 작업을 처리할 수 있으므로
좋은 선택으로 보인다.
위 3개에 대한 코드로 정리해놓고 필요시에 가져다 사용할 생각이다 끗.
<figure 0. 위 코드 실행화면 ㅋ>
반응형
'프로그래밍' 카테고리의 다른 글
[Python] 프록시 서버 - http,https 통신 예제 (0) | 2018.07.26 |
---|---|
[Zydis] 디스어셈블러 라이브러리 (0) | 2018.07.24 |
안드로이드 8.1 오레오(Oreo) AOSP 빌드 (feat. 통화녹음을 하자.) (2) | 2018.04.02 |
Visual Studio / x64 아키텍쳐에서 어셈블리어를 사용하기 | 소스코드정렬 (0) | 2018.02.27 |
[Python] DES 예제 (0) | 2018.02.06 |
댓글