반응형 Python124 Python - GIL, 멀티 쓰레드(thread) vs 멀티 프로세스(multiprocessing, subprocess) Python 코드를 작성하다보면 시스템 I/O를 효과적으로 사용하는 병령 처리 프로세스를 고민하게된다.병렬 처리란, 특정 Task를 동시에 실행함으로써 순차적으로 처리하는 기본 처리 프로세스 보다 이점을 가져갈 수 있다.특히 HTTP와 같은 네트워크 요청이나 Disk등 시스템 자원을 사용하는 I/O 가 발생하는 경우 자원 I/O를 기다리지 않고 다른 Task로 실행할 수 있어 보다 효과적으로 프로세스를 처리할 수 있다.그렇다면 Python에는 어떤 방식으로 병렬처리를 진행해볼 수 있을까?필자가 생각하는 방안은 총 2가지 정도이다.멀티 쓰레드(thread)를 사용하는 방법과 멀티 프로세스(process)를 사용하는 방법이다.다만 이 멀티 쓰레드(thread)와 멀티 프로세스(process)를 시작하기 전에.. 2024. 3. 25. Python - *args와 **kwargs 이해 파이썬은 참 편리한 언어이다. 여러가지 내부적으로 처리해주는 기능들이 있으면서도, 이러한 부분들이 개발자들이 사용하는데 크게 이질감이 있지 않다. 이렇게 개발자의 편의를 지원해주는 기능들을 매직 메소드라는 것이 있고, 그중에 *args와 **kwargs 역시 이러한 매직 메소드로 지원되는 기능인데 어떻게 활용 할 수 있는지에 대해서 간략히 정리해 본다. *args와 **kwargs 는 보다 쉽게 아스키로 표현된다고 할 수 있다. * 아스키 기호 하나: 값를 의미 ** 아스키 기호 두개: 사용하면 키가 있는 인자값을 의미 이 매직 메소드를 사용하기 유용한 곳은 어떠한 변수 값을 받을지 알 수 없는 경우에 여기에 값이 있는지를 확인해서 처리할 수 있기 때문에 유용하게 사용할 수 있다. *args(Arguem.. 2024. 3. 25. Python - JSON 데이터 검색 및 불러오기(dumps, loads, items) >>> load_json_data.keys() >>> for json_key in load_json_data.keys(): ... print(load_json_data[json_key]) ... ('a', 'atest') ('b', ['{"b":"btest"}']) 최근에는 API간 통신을 JSON 형태로 진행하는 경우가 많은데, Python은 JSON 친화적인 언어라고 할 수 있다. Python에서 JSON을 어떻게 다루는지 간단히 알아보자. JSON 만들기(dumps) JSON 데이터를 생성하는 방법은 다음과 같이 중괄호를 이용하여 키를 지정하여 Value를 넣어주면 된다. >>> json_data = {} >>> json_data['a'] = 'atest' >>> json_data {'a': 'at.. 2024. 3. 25. Python - FastAPI with CRUD application by pydantic FastAPI는 파이썬에서 사용할 수 있는 현재 가장 좋은 백엔드 프레임워크라고 할 수 있다. FastAPI는 다음과 같은 장점을 가지고 있다. 1. 각 함수는 비동기로 동작한다. 2. 백엔드를 작업하면 데이터 처리에 골치를 아픈 경우가 많다. FastAPI는 데이터 오류를 쉽게 처리할 수 있는 좋은 프레임워크 이다. Pydantic을 이용한 Json 값 오류를 쉽게 조치 할 수 있다. 세부적인 내용은 https://pydantic-docs.helpmanual.io/ 를 확인하기 바란다. 3. Swagger, Redoc를 기본적으로 제공한다 4. 파이썬에서 빠른 프레임 워크에 속한다. 아래 벤치마크 결과를 확인해보면, 다른 파이썬 웹 프레임워크 보다 휼륭한 속도를 가지고 있다. Round 19 resul.. 2024. 3. 25. Python - FastAPI Relationship SQL data 처리 FastAPI를 이용해서 Relationship 데이터를 처리하면서 해당 부분만 요약해서 정리해 본다. 본 예시에서는 Post라는 본문에 관련있는 Account들을 나열하는 구조를 예시로 잡았다. 그리고 기본 프로그램의 구조는 아래와 같다. . └── crud.py ├── database.py ├── main.py ├── api.py └── schemas.py 이를 위해 Account와 Post에 대한 관계 테이블에 대한 Model을 정의 해야 한다. Post와 관련있는 Account를 참조하기 위해서 Account에 post_id라는 외례키 컬럼을 추가하였다. models.py from sqlalchemy import Boolean, Column, Integer, String, DateTime, Big.. 2024. 3. 25. PYTHON - pip 패키지 실치 [SSL: CERTIFICATE_VERIFY_FAILED] 오류 해결 pip를 이용해서 패키지를 설치하다보면 나타날 수 있는 오류로써, CERTIFICATE_VERIFY_FAILED 해결 방법은 trusthost를 등록하여 해소가 가능하다. 보통 패키지들은 pypi.org 혹은 pypi.python.org에서 다운로드 할 수 있으므로, 아래 도메인을 신뢰하는 도메인으로 구성하자. pypi.org pypi.python.org files.pythonhosted.org pip --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org install pip 환경 설정 파일에 등록하면, 매번 입력하는 번거로움을 해소할 수 있다. 경로는 아래와 같다. %APPDATA%\pip\.. 2024. 3. 18. Python - Microsoft 365 Defender Advanced hunting Query Microsoft 365 Defender Advanced hunting Query 에서 사용할 수 있는 Python 코드이다. mde_search 함수를 재활용해서, 입력한 값이 어떤 타입인지에 따라 검색하는 조건을 바꾸도록 설계되어 있다. import json import time import argparse import pandas as pd import logging import sys import os import re import validators import datetime import random import zipfile import urllib.parse from collections import OrderedDict from urllib3.util.retry import Retry i.. 2024. 3. 18. Python - Base64 인코딩, 디코딩 방법(인증/로그인/토큰) Python에서 Base64 인코딩과 디코딩은 기본적으로 제공하는 내장 모듈이다. 인증 및 로그인에 jwt나 토큰을 사용한다면 값을 그냥 전달하지 않고 base64로 인코딩하여 전달해야 하기 때문인데 보통 인증쪽에서 많이 사용된다. 파이썬에서는 base64 모듈을 통해서 활용이 가능하다. import base64 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다. - 위키 그럼 Base64 인코딩을 진행하는 방법은 다음과 같다. Base64 인코딩 Byte(바이트)로 변환 > Base64 인코딩 진행 코드로 보면 다음과 같다. str_name = 'test' byte_name = str_name.encod.. 2024. 3. 18. Python - 문자열을 Datetime변환시 TimeZone(strptime unconverted data remains) 해결하기 문자열로 되어 있는 값을 Datetime으로 변환하고자 한다면, 정확하게 각 문자열이 시간데이터 셋과 동일하게 맞추어야 하는데, Timezone을 인식 시키는 방법에 대해서 간단히 알아보고자 한다. 만약 아래와 같이 한국 타임존값이 들어 있는 것의 경우를 가정해 보겠다. '2023-12-18T15:47:56.599821424+09:00' >>> import datetime >>> str_date_time = '2023-12-18T15:47:56.599821424+09:00' >>> convert_datetime = datetime.datetime.strptime(str_date_time, '%Y-%m-%dT%H:%M:%S.%f') Traceback (most recent call last): File ".. 2024. 3. 14. 이전 1 2 3 4 5 6 7 8 ··· 14 다음 반응형