언어 정리/python_비동기관련_lib20 target 시간에 비동기 콜백 호출 target시간(시작 후 1분 뒤)이 되면 코루틴기반 비동기로 my_callback 콜백 함수를 호출 시킨다 -- fut객체.add_done_callback 으로 등록하는 콜백함수에는 반드시 파라미터가 하나이상 이여야 한다. import asyncio import datetime from typing import Union class AA(): def __init__(self): self.prevent_multi_task = True async def wait_target_time(self, target_time: Union[datetime.datetime, str]): if self.prevent_multi_task is True: self.prevent_multi_task = False if isin.. 2023. 12. 11. asyncio : 동일한 Task 5번이상 누적 방어 코드 코드 설명 task_1은 1초마다 생성하고 task_2는 2초마다 생성 5번이상 누적된 task 만 FIFO 순으로 종료 출력값은 1. 누적된 task의 수, 2. 실행되고 있는 task 함수명, 3.종료된 task 함수명 코드는 0.5초 간격 루프 하단의 코드 실행결과 누적된 TASK 개수: 1 실행되고 있는 함수 명: ['task_1_a'] 누적된 TASK 개수: 2 실행되고 있는 함수 명: ['task_1_a', 'task_1_a'] 누적된 TASK 개수: 3 실행되고 있는 함수 명: ['task_2_b', 'task_1_a', 'task_1_a'] 누적된 TASK 개수: 4 실행되고 있는 함수 명: ['task_2_b', 'task_1_a', 'task_1_a', 'task_1_a'] 누적된 TA.. 2023. 6. 10. 비동기인풋, toolbar 터미널출력 << prompt-toolkit, curses 코루틴 동작은 동작대로 하고 input을 비동기적으로 받는다. 받았을 시 동작 하게끔 가능 + input 메세지는 항상 맨 하단에 있다. pip 로 패키지 받고 pip install -U prompt-toolkit 코드 import asyncio from prompt_toolkit import PromptSession from prompt_toolkit.patch_stdout import patch_stdout class AA(): def make_loop(self): self.main_loop = asyncio.get_event_loop() # self.main_loop.add_signal_handler(signal.SIGINT, self.ask_exit) # self.main_loop.add_sign.. 2022. 12. 22. 코루틴으로 ROS2 작업 handler - agent - manager 구조 Subscription 노드와 , Publisher 노드로 나눠서 진행한 코드랑 둘다 같은 노드로 묶어서 진행한 코드 2종류로 짬 콜백이라든지, TOPIC, msg_type, qos 정의부분을 최대한 top level class 에서 다룰 수 있게금 구조를 짬 한 노드에 Subscription, Publisher 둘다 묶은 코드 설명 : 1초 지날때마다 /topic_1 -> 2 -> 3 -> 4 publish 해줍니다. topic_1 ~ 4 를 subscribing 하고 있기 때문에 바로바로 콜백이 온합니다 서브스크립션 , 퍼블리셔를 정의하는 부분은 dataclasses로 정의해 사용합니다. 출력값 : import json import time impo.. 2022. 11. 28. asyncio로 ros2_spin 구동예제 ( handler-agent-manager ) handler - agent - manager 구조 노드 1개 퍼블리셔 2개 서브스크립션 2개 async 함수를 활용해서 spin_once 함수 돌림 퍼블리셔나 서브스크립션에 대한 config 값은 manager에서 정의해주고 Publisher 객체를 manager 단에 가져와서 manager에서 발행, subscription의 subscriber callback 도 manager에서 정의후 등록 handler agnet agnet manager 코드 : node_with_multiple_sub_pub.py import asyncio from std_msgs.msg import String import threading import rclpy from rclpy.executors import MultiT.. 2022. 9. 17. 코루틴 과 Eventloop 그리고 Future 참고 : https://tech.buzzvil.com/blog/asyncio-no-1-coroutine-and-eventloop/ asyncio 뽀개기 1 - Coroutine과 Eventloop 이 시리즈의 목적은 asyncio의 컴포넌트들과 활용법을 소개하는 것입니다. 최종적으로는 실제 production에 쓰이고 있는 graceful shutdown을 구현하는 것을 목표로 하며, 그 과정에서 필요한 asyncio 지식 tech.buzzvil.com https://tech.buzzvil.com/blog/asyncio-no-2-future/ asyncio 뽀개기 2 - Future의 활용 Future를 잘 활용하면 단순히 await 하는 용도보다 더 다양한 흐름 제어를 할 수 있습니다. 이전 포스트에서.. 2022. 9. 14. 이전 1 2 3 4 다음