본문 바로가기

Python

(6)
python parameter에서 bare *란? python에서 변수명에 *, **를 붙이면 packing, unpacking이라는 것은 알고있을 것이다. 하지만 달랑 * 하나만 있으면 그건 무엇을 의미하는지는 몰랐다. fastapi 문서를 보는 도중에 다음과 같은 표현을 발견했다. 검색 키워드는 bare asterisk로 검색했으며, 의미는 * 뒤에 나오는 parameter들은 무조건 key=value형태여야한다는 것이다. 즉, bare *은 뒤에 나오는 parameter들은 전부 named arguments형태를 띄고 있다라고 알려주는 것이다. 만약 뒤에 변수명만 넣는다면, 다음과 같은 에러가 나타난다.
python xxx is not a package step function을 이용해 lambda를 실행시키는 도중에 에러가 떴다. enums가 package가 아니라고 한다. enums라는 package는 분명히 있는데 아니라고 하는 이유를 모르겠다. 코드를 유심히 본 결과, system path를 두 군데를 지정해줬는데, 그 두 군데에서 한 곳은 enums.py를, 한 곳은 enums폴더가 있고 안에 storage_enum.py가 있는 것이다. 이럴 경우에는 어떻게 될까, 한번 테스트 해봤다. /test/ - aaa/bbb.py - aaa.py 다음과 같이 test폴더 안에 aaa폴더와 aaa.py를 만들고 aaa폴더 안에 bbb.py를 만들었다. aaa.py 안에는 test라는 class를 만들었다. test폴더내에서 import aaa.bbb 혹은..
(에러)RuntimeError: Task <Task pending name='Task-1' coro=<update_one() running at test.py:7> cb=[_run_until_complete_cb() from bson.objectid import ObjectId from motor.motor_asyncio import AsyncIOMotorClient import asyncio a = AsyncIOMotorClient(mongourl) async def update_one(): print("complete") return await a[database][collection].insert_one({"_id": ObjectId("61bc40f123a9a9ac317d51c5")},{"a":"b"}) asyncio.run(update_one()) 위와 같이 asyncio.run을 시키자 아래와 같은 에러가 발생했다. 과연 이러한 에러는 무엇일까? 일단 구글링 한 결과 loop = asyncio.get_eve..
os.system significantly take time more than shutil. dataset을 옮기는 과정중에 파이썬 스크립트를 짜서 몇십만장의 image를 복사해야했다. 파일을 복사하는 방법은 여러가지이고, 많은 블로그들에서 알려주고 있다. 하지만 그러한 방법 중 os.system을 통해 shell 명령어와 똑같이 쓰는 방법이 쉬울 거 같아아서 썼지만, 대략 한개의 image를 복사하는데 0.4~0.5초가 걸렸다. 이렇게 가다가는 15만장 * 0.4 = 60000초 = 약17시간이 걸린다. 그래서 다른 방법중 shutil.copy()를 써서 돌렸는데 세상에나 10분도 채 안되서 복사가 된 것이다. 어마어마한 차이를 보여 이유를 찾아봤다. os.system은 subshell을 만들어 copy작업을 수행하는 시간이 길고, shutil은 직접적으로 system call을 요청하기 때문..
(에러)Asyncssh error Host key is not trusted Asyncssh를 사용할 때 "SSH connection failed: Host key is not trusted" 에러를 많이 볼 수 있을 것이다. 이것은 hostkey validation을 할 때에 default로 .ssh/known_hosts 파일안의 key들을 확인하는 절차인데 처음 ssh를 연결할 때 다음과 같은 절차를 거치게 되는데 이때 host key가 저장이 되는 것이다. connection = asyncssh.connect(server_ip, username=username, client_keys=client_keys, known_hosts=None, server_host_key_algs=['ssh-rsa']) async with connection as conn: ... 따라서 다음과 ..
python zip folder 1. #input folder zip import shutil shutil.make_archive(output_filename, 'zip', input_folder_name) 2. #특정 extension만 recursive하게 zip import os import zipfile EXTENSION=['jpg', 'JPG'] def zip_folder(input_folder_path, output_zip_path): with zipfile.ZipFile(output_zip_path, mode='w') as zipf: len_dir_path = len(input_folder_path) for root, _, files in os.walk(input_folder_path): for file in files: ..