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 |
댓글