안녕하세요. 실무에서 시간이 오래소요되는 3개의 delete쿼리를 excutor service를 사용하여 멀티스레드형식으로 1개의 스레드가 1개의 쿼리를 수행하도록 구현해보고 싶습니다. 그런데 멀티스레드를 사용했을때 트랜잭션은 보통 어떻게 처리하시나요.. ? 저는 @transactional 을 선언해서 사용하고 있는데 이는 스레드1개당 트랙잭션이 생성되는거라 제가 의도한데로 롤백이 제대로 안될거라고 하더라구요.. 3개의 쿼리가 모두 성공했을때 커밋되고 그렇지않으면 롤백시키고싶은데 이부분에 대한 지식도 혹시 알수있을까요? 추가로 혹시 해당 질문 관련 강의를 개설해놓으신게 있다면 알려주시면 감사하겠습니다!
강사님 *** !!!! Please make sure that all your Airflow components (e.g. schedulers, webservers, workers and triggerer) have the same 'secret_key' configured in 'webserver' section and time is synchronized on all your machines (for example with ntpd) See more at https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#secret-key *** Could not read served logs: 403 Client Error: FORBIDDEN for url: http://e1efbc97ae25:8793/log/dag_id=dags_email_operator/run_id=manual__2024-08-24T06:22:20.118495+00:00/task_id=send_email_task/attempt=1.log [2024-08-24, 06:22:25 UTC] {local_task_job_ runner.py:123 } ▶ Pre task execution logs [2024-08-24, 06:22:25 UTC] {warnings.py:112} WARNING - /home/***/.local/lib/python3.12/site-packages/***/utils/email.py:155: RemovedInAirflow3Warning: Fetching SMTP credentials from configuration variables will be deprecated in a future release. Please set credentials using a connection instead. send_mime_email(e_from=mail_from, e_to=recipients, mime_msg=msg, conn_id=conn_id, dryrun=dryrun) [2024-08-24, 06:27:49 UTC] {taskinstance.py:3301} ERROR - Task failed with exception Traceback (most recent call last): File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py", line 767, in execute task result = execute callable(context=context, **execute_callable_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py", line 733, in execute callable return ExecutionCallableRunner( ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/operator_helpers.py", line 252, in run return self.func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/baseoperator.py", line 406, in wrapper return func(self, args, *kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/operators/email.py", line 79, in execute send_email( File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/email.py", line 80, in send_email return backend( ^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/email.py", line 155, in send_email_smtp send_mime_email(e_from=mail_from, e_to=recipients, mime_msg=msg, conn_id=conn_id, dryrun=dryrun) File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/email.py", line 280, in send_mime_email smtp_conn.starttls() File "/usr/local/lib/python3.12/smtplib.py", line 779, in starttls self.sock = context.wrap_socket(self.sock, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/ssl.py", line 455, in wrap_socket return self.sslsocket_class._create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/ssl.py", line 1042, in create self.do handshake() File "/usr/local/lib/python3.12/ssl.py", line 1320, in do_handshake self._sslobj.do_handshake() TimeoutError: _ssl.c:983: The handshake operation timed out 위 문구와 함께 현재 smtp.gmail.com 에 접속이 안되는데.. (worker에서도 접속이 안됨) 혹시 다른 설정이 필요할게 있을까요?
import win32com.client import os import shutil # 캐시 디렉토리 경로 cache_dir = os.path.join(os.getenv('LOCALAPPDATA'), 'Temp', 'gen_py') # 캐시 디렉토리 삭제 if os.path.exists(cache_dir): shutil.rmtree(cache_dir) # 캐시 재생성 및 한글 객체 생성 hwp = win32com.client.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") # 문서 시작 위치로 커서 이동 hwp.MovePos(2) # 문서 시작으로 커서 이동 # 표 생성: 행(5), 열(3) act = hwp.CreateAction("TableCreate") pset = act.CreateSet() act.GetDefault(pset) pset.SetItem("Cols", 3) pset.SetItem("Rows", 5) act.Execute(pset) 이게 실행코드고 오류는 --------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\gencache.py:255, in GetModuleForCLSID(clsid) 254 try: --> 255 __import__(sub_mod_name) 256 except ImportError: ModuleNotFoundError: No module named 'win32com.gen_py.7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0.IDHwpAction' During handling of the above exception, another exception occurred: FileNotFoundError Traceback (most recent call last) Cell In[3], line 21 18 hwp.MovePos(2) # 문서 시작으로 커서 이동 20 # 표 생성: 행(5), 열(3) ---> 21 act = hwp.CreateAction("TableCreate") 22 pset = act.CreateSet() 23 act.GetDefault(pset) File ~\AppData\Local\Temp\gen_py\3.12\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0\IHwpObject.py:106, in IHwpObject.CreateAction(self, actidstr) 103 ret = self._oleobj_.InvokeTypes(10031, LCID, 1, (9, 0), ((8, 1),),actidstr 104 ) 105 if ret is not None: --> 106 ret = Dispatch(ret, 'CreateAction', None) 107 return ret File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\__init__.py:119, in Dispatch(dispatch, userName, resultCLSID, typeinfo, UnicodeToString, clsctx) 117 assert UnicodeToString is None, "this is deprecated and will go away" 118 dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch, userName, clsctx) --> 119 return __WrapDispatch(dispatch, userName, resultCLSID, typeinfo, clsctx=clsctx) File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\__init__.py:47, in __WrapDispatch(dispatch, userName, resultCLSID, typeinfo, UnicodeToString, clsctx, WrapperClass) 43 from . import gencache 45 # Attempt to load generated module support 46 # This may load the module, and make it available ---> 47 klass = gencache.GetClassForCLSID(resultCLSID) 48 if klass is not None: 49 return klass(dispatch) File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\gencache.py:200, in GetClassForCLSID(clsid) 198 if CLSIDToClass.HasClass(clsid): 199 return CLSIDToClass.GetClass(clsid) --> 200 mod = GetModuleForCLSID(clsid) 201 if mod is None: 202 return None File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\gencache.py:264, in GetModuleForCLSID(clsid) 261 info = demandGeneratedTypeLibraries[info] 262 from . import makepy --> 264 makepy.GenerateChildFromTypeLibSpec(sub_mod, info) 265 # Generate does an import... 266 mod = sys.modules[sub_mod_name] File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\makepy.py:377, in GenerateChildFromTypeLibSpec(child, typelibInfo, verboseLevel, progressInstance, bUnicodeToString) 374 progress.LogBeginGenerate(dir_path_name) 376 gen = genpy.Generator(typelib, info.dll, progress) --> 377 gen.generate_child(child, dir_path_name) 378 progress.SetDescription("Importing module") 379 importlib.invalidate_caches() File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\genpy.py:1363, in Generator.generate_child(self, child, dir) 1361 out_name = os.path.join(dir, an_item.python_name) + ".py" 1362 worked = False -> 1363 self.file = self.open_writer(out_name) 1364 try: 1365 if oleitem is not None: File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\genpy.py:1049, in Generator.open_writer(self, filename, encoding) 1039 def open_writer(self, filename, encoding="mbcs"): 1040 # A place to put code to open a file with the appropriate encoding. 1041 # Does *not* set self.file - just opens and returns a file. (...) 1046 # don't step on each others' toes. 1047 # Could be a classmethod one day... 1048 temp_filename = self.get_temp_filename(filename) -> 1049 return open(temp_filename, "wt", encoding=encoding) FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\lemon\\AppData\\Local\\Temp\\gen_py\\3.12\\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0\\IDHwpAction.py.7700.temp' 이렇게 나오는데 해결할 수 있는 방법 있을까요?
참고로, 단순 구현 문제와 브루트 포스 관련 문제만 잘 풀어도 어렵지 않은 코딩테스트는 합격을 노려볼만합니다. 해당 내용이 언급 되어 있던데, 이부분은 제 코테 전략은 아래와 같습니다. 백준 브루트포스 알고리즘별 문제모음 https://www.acmicpc.net/problemset?sort=ac_desc&algo=125 백준 시물레이션(구현) 알고리즘별 문제모음 https://www.acmicpc.net/problemset?sort=ac_desc&algo=141 알고리즘별 문제 모음으로 브루트 포스 : 100문제 시물레이션 : 100문제 각각 100문제 정도 풀어보고 해당 강의에 있는 문제들을 완전 이해와 학습 복습을 하는것인데 이정도면 스타트업 코딩테스트 정도 노려볼만한가요?
강의13분대 관련 질문입니다. public void paint() { System.out.print("A"); draw();} 여기서 draw();를 this draw(); 로 수정하게 되면 자식 draw가 아닌 부모 draw를 불러오나요? 강의 14분대 문제 질문입니다. A b = new B(1)을 통해 자식 클래스에서 public B(int i)를 불러왔으면 부모 클래스에서도 public A(int i)를 불러와야 하는것이 아닌가요? 이전 강의에서 파라미터가 있는 생성자 car(a,b)예제를 들고 설명을 해주실 때 그렇게 이해를 했는데 무슨차이인지 통 모르겠네요.. 17분대 specialDraw가 오류 나는 이유가 정확히 궁금해요 A b = new B(1); 을 통해 업캐스팅을 통해 B를 명시해줬기 때문에 에러가 나는걸까요? 뭔가 명확히 갈증이 해소되지 않는느낌이라 답답하네요...ㅠ
안녕하세요, 인강 수강후 현업에서 Airflow 를 통해서 Dag 을 수행하고 있는데요, 서비스 PM 등의 이유로 수시간(3~5시간) 정도 pause 를 진행하고 다시 unpause 를 하게 되는 경우가 있습니다. 이럴때 unpasue 를 클릭하게 된다면 비록 Dag 에 catchup = false 로 지정해 놓더라도, 가장 최근에 수행 되었어야 할 Dag Run 은 수행되게 되는데요 Ex ) schedule_interval = 10,20,30 1,2,3 * * * * Dag.catchup = False pause = 01:15 unpause = 03:25 수행되는 Dag run 의 data_interval_end = 03:20 그런데 여기서 3시 20 분 dag_run 을 수행시키지 않기 위해서 생각을 하다가, Dag 의 default_args 의 start_date 값을 datetime.now 로 주는것에 대해서 생각을 해봤는데요, 당장 간단하게 테스트를 했을때는 큰 문제가 없었는데, 혹시 해당 케이스가 문제가 되는 케이스가 있을까요? 그리고 start_date 를 now 로 하는것 말고도 다른 방안이 있다면 좋은 방안 부탁 드립니다 감사합니다!
synchronized를 unlock에 걸 필요가 없다는건 이해를 했는데 이것 저것 실험(?)을 해보다가 unlock()에 synchronized를 걸면 무한 대기 상태가 지속되는지 이해가 안됩니다..ㅠㅠ제가 계속 고민을 한 로직으로는 Thread-1이 비즈니스 로직을 실행한 후 finally를 실행해서 락을 반납해 Thread-2가 어느 정도 시간이 지난 후에 락을 받아서 실행이 될 것이라고 생각을 했는데 아니라서 많은 고민 끝에 질문을 남겨봅니다..ㅠㅠ 답변 기다리겠습니다..!
public static void main(String[] args) throws InterruptedException, ExecutionException { SumTask task1 = new SumTask(1, 50); SumTask task2 = new SumTask(51, 100); ExecutorService es = Executors.newFixedThreadPool(2); Future<Integer> future1 = es.submit(task1); Future<Integer> future2 = es.submit(task2); log("작업 시작"); long st = System.currentTimeMillis(); Integer sum1 = future1.get(); long end = System.currentTimeMillis(); log(end - st + "ms"); Integer sum2 = future2.get(); log("task1.result = " + sum1); log("task2.result = " + sum2); int sumAll = sum1 + sum2; log("task1 + task2 = " + sumAll); es.close(); } 02:45:32.785 [ main] 작업 시작 02:45:32.785 [pool-1-thread-1] 작업 시작 02:45:32.785 [pool-1-thread-2] 작업 시작 02:45:34.794 [pool-1-thread-1] 작업 완료 result = 1275 02:45:34.794 [pool-1-thread-2] 작업 완료 result = 3775 02:45:34.797 [ main] 2007ms 02:45:34.797 [ main] task1.result = 1275 02:45:34.797 [ main] task2.result = 3775 02:45:34.797 [ main] task1 + task2 = 5050 맨 위 코드를 실행했을 때 위와 같은 출력이 나왔습니다. main 메서드는 BlockingQueue에 등록된 future를 스레드 풀에서 가용 가능한 스레드 만큼 모두 실행 시킨 후에 WAITING 상태로 변경된다고 이해하면 될까요?
안녕하세요 선생님 머린이 질문드립니다 ㅠ k-fold 검증하는거에 대해 궁금한게 있습니다 X_train, X_val, y_train, y_test = train_test_split(x,y,test_size= 0.3) 으로 햇을 때 만약 100개 데이터가 있으면 30개 데이터를 가지고 질문1) fit -> x_train, y_train : 30개 데이터를 가지고 훈련한다. ) 70개 데이터에 대해 pred : x_val 후 -> accuracy (y_val, pred) 맞춰본다 (모의고사를 푼다) -> 이제 fit한 데이터를 가지고 실제 수능을 푼다 (real test data) 가 맞을까요 ?? 질문2) 이게 맞다면 k-폴드 교차검증은 (k=5일떄) fit 활동 -> 30개 데이터 셋 fit을 5번 수행 실시 후 70개의 pred : x_val 활동을 한다 가 맞을까요 ? '^',,
안녕하세요 선생님 ㅎ ㅠ 강의중 2.4 model selection 모듈소개에서 from sklearn.datasets import load_iris 내장된 데이터셋을 불러온 후 head()랑 shape을 바로 파악하고싶은데 예를들어 df = pd.read _csv("~~.csv") df.head() 하면 x1, x2 , x3, target (물론 본인이 x,y 파악) 데이터 셋을 바로 파악할 수 있는데 내장 데이터는 iris_df = pd.DataFrame(iris_ data.data , columns=iris_data.feature_names) iris_df['target']=iris_ data.target 이런 작업이 필요한걸까요 ㅠㅠ?..
안녕하세요. 1:44 부분 따라 해보니 에러메세지는 동일하나 , 그 위에 프린트되는 soup 내용은 뜨질않습니다. 우선 에러메세지는 동일해서 이어서 따라해보니 (헤더 설정 등) 런 돌리니 런 완료 표시는 뜨는데 프린트 되는 내용이 없습니다;; 지금까지 잘 따라왔는데 여기서 막히네요.. .
안녕하세요 영한님 바로 아래 질문에서 조금 더 의문이 있어 질문드립니다. 4분대 그림에서 c0 소비자 스레드는 데이터를 얻고 notify()해서 스레드 대기 집합에 있는 임의의 스레드를 깨울 것입니다. 만일 이때 소비자 스레드 c1이 깨어나면, 큐에 소비할 데이터가 없어서 다시 스레드 대기 집합으로 들어갈텐데, 그 다음은 notify()를 호출할 스레드가 없어서 모든 스레드가 WAITING 상태로 대기 집합에 있을 것으로 생각합니다. 그러면 이후 다른 새로 생성된 생산자 스레드가 put()을 호출하지 않는한 모든 스레드가 쉬고 있는 상황에 놓이는게 맞을까요? 결국에는 p1을 깨우지 않는 스레드 기아 상태는 이해되는데, 교안에 "최악의 경우 c1 ~ c5 스레드가 반복해서 깨어날 수 있다." 표현에서 스레드들이 계속 연쇄적으로 깨어나는 뉘앙스가 느껴져서 명확히 하고자 여쭤봅니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 교안 "8. 생산자 소비자 문제 1" - 12 page - 3번째 줄 "임계 영역은 synchronized를 영역을 뜻한다." -> "임계 영역은 synchronized를 적용한 영역을 뜻한다." "적용한"이 빠져서 다음 업데이트 때 반영되면 좋을 것 같아 남깁니다. 좋은 강의 항상 감사드립니다 영한님! :)
안녕하세요 선생님, 여쭤볼께 있어 글남깁니다 ~! 만약 2회차 회귀 문제라 가정하면 만약 데이터프레임이 x1 x2 x3 ~~~~ y 값이 있을 때, 만약 target으로 하는 y가 있다 ! 라고 했을 때 거기에 대한 x1, x2, x3가 ~~범위에 들어와야 target하는 y값에 가깝다 ! 라는 코딩도 있나요 ? 어떻게 보면 회귀분석인거같은데. .ㅠ 배운건 x1 x2 x3가 있을떄 y가 나오는거까지 밖에 안배워서 궁금하네용
안녕하세요 영한님! 다중서버로 이루어진 분산환경에서 분산락이 주로 사용되는데 이는 전체 또는 여러 서버에서 동기화가 필요한 데이터여서 그런것이죠? 현재 학습내용인 자바에서 제공하는 락 (서버별로 락을 갖는 방식은) 분산환경에는 적합하지 않고, 서버별로 락을 걸어도 커버 되는 자원에 한정되게 사용되는걸로 이해한게 맞을까요?
auth LoginView/LogoutView에 success_url_allowed_hosts 설정 추가하여, 로그인/로그아웃 후에 지정 호스트로의 이동 허용 현재 로그인/로그아웃후 지정 호스트로 이동을 허용하는 부분을 실습하고 있는데 막히는부분이 있어서 질문 드립니다. 이부분 코드를 붙여넣고 실행하였더니 로그아웃 부분에서 아래와 같은 에러가 발생하였습니다. (프로필 페이지로 이동은 잘 됩니다.) 찾아보니 GET 메서드가 거절된 것같은데, 이전 강의에서 장고에서 과거에는 GET으로 받았으나, 이제는 POST 요청만 허용한다는 내용을 들은적이 있었던것같은데, 그것과 관련된 것인지 궁금합니다. 다른 분들은 잘되셔서 넘어가셨을텐데, 저가 잘못된것 같긴한데 혹시나해서 여쭈어봅니다. 아래는 로그아웃 구현된 부분입니다.