안녕하세요 지존오토 끊고 자주 안오게 되네요 ㅎㅎ;;
혹시 도움좀 받을수 있을지 몰라 여쭙니다.
현재 앱 플레이어 사용하고 있는데요.
비활성서치와 비활성클릭은 구현을해서 잘 클릭 하고 잘 찾는데요.
파일을 8개로 나눠 만들어놓고 스레딩이라는 라이브러리로
8개를 개별 실행하게 만들어 놨습니다.
처음엔 작동도 잘되서 만족 하였습니다.
문제는 추가 및 수정 작업을 할때. 파일을 하나하나 다 복사다시하고 hwnd이라는 변수에 이름을 8개를 다 바꿔줘야합니다.
시간이 너무 소요되어 파일을 1개로 간추려 사용하려고 하는데
어떤 방식으로 줄여야할지 감이 안잡힙니다.
8개의 파일은 함수가 모두 똑같고 hwnd 라는 변수에 들어가는 이름만 다릅니다.
제가 사용 하고 싶은 기능은
8개의파일로 8개의 컨트롤이 아닌
1개의파일로 8개의 각각 다른 핸들을 컨트롤 해주는겁니다.
숨은 고수분이 있으시길 제발~
클래스로 코드를 작성후 객체를 8개 생성해서 각각 쓰레드로 돌리면 안되려나요.
파이썬에서 병렬 처리를 클래스 형태로 작성하는 방법은 클래스 내에서 작업을 정의하고, 이를 병렬로 실행하는 방법입니다. 여기서는 `concurrent.futures` 모듈을 활용하여 `ThreadPoolExecutor`를 이용한 방법을 설명하겠습니다.
아래는 클래스를 이용해 8개의 작업을 병렬로 처리하는 예시입니다.
```python
import concurrent.futures
import time
# 작업을 처리할 클래스 정의
class Worker:
def __init__(self, task_id):
self.task_id = task_id
# 작업 메서드
def run(self):
print(f"작업 {self.task_id} 시작")
time.sleep(2) # 작업 처리 대기 시간
print(f"작업 {self.task_id} 완료")
return f"작업 {self.task_id} 결과"
# 병렬 처리를 수행하는 클래스
class TaskManager:
def __init__(self, num_workers):
self.num_workers = num_workers
# 병렬 처리 실행
def execute_tasks(self):
workers = [Worker(i) for i in range(self.num_workers)] # Worker 인스턴스 생성
with concurrent.futures.ThreadPoolExecutor(max_workers=self.num_workers) as executor:
futures = [executor.submit(worker.run) for worker in workers] # 병렬로 작업 실행
for future in concurrent.futures.as_completed(futures):
print(future.result()) # 완료된 작업의 결과 출력
# 메인 실행 부분
if __name__ == "__main__":
manager = TaskManager(8) # 8개의 작업을 처리할 TaskManager 생성
manager.execute_tasks() # 작업 실행
```
### 코드 설명:
1. **`Worker` 클래스**: 각각의 작업을 담당하는 클래스입니다. 각 인스턴스는 작업 ID를 가지고 있으며, `run` 메서드를 통해 실제 작업을 수행합니다.
2. **`TaskManager` 클래스**: 여러 `Worker` 인스턴스를 병렬로 실행하는 역할을 합니다. `execute_tasks` 메서드는 `ThreadPoolExecutor`를 이용하여 병렬 작업을 처리합니다.
3. **병렬 처리**: `ThreadPoolExecutor`는 최대 8개의 작업을 동시에 실행합니다. `executor.submit` 메서드는 각각의 작업을 스레드풀에 넣어 병렬로 실행합니다.
이 코드를 실행하면 8개의 작업이 병렬로 실행되고, 작업이 완료되면 그 결과가 출력됩니다.