missionpanel 1.3.1__tar.gz → 1.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {missionpanel-1.3.1 → missionpanel-1.4.0}/PKG-INFO +1 -1
- missionpanel-1.4.0/missionpanel/handler/__init__.py +3 -0
- missionpanel-1.4.0/missionpanel/handler/parallal_handler.py +37 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel.egg-info/PKG-INFO +1 -1
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel.egg-info/SOURCES.txt +1 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/setup.py +1 -1
- missionpanel-1.3.1/missionpanel/handler/__init__.py +0 -2
- {missionpanel-1.3.1 → missionpanel-1.4.0}/LICENSE +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/README.md +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/__init__.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/example/__init__.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/example/rsshub.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/example/subprocess.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/example/ttrss.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/handler/handler.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/orm/__init__.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/orm/core.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/orm/handler.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/submitter/__init__.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/submitter/abc.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/submitter/asynchronous.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel/submitter/submitter.py +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel.egg-info/dependency_links.txt +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel.egg-info/requires.txt +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/missionpanel.egg-info/top_level.txt +0 -0
- {missionpanel-1.3.1 → missionpanel-1.4.0}/setup.cfg +0 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
import abc
|
2
|
+
import asyncio
|
3
|
+
from typing import List
|
4
|
+
|
5
|
+
from missionpanel.orm import Mission, Attempt
|
6
|
+
from .handler import AsyncHandler, HandlerInterface
|
7
|
+
|
8
|
+
|
9
|
+
class ParallelAsyncHandler(AsyncHandler, abc.ABC):
|
10
|
+
def __init__(self, n_parallel: int, *args, **kwargs):
|
11
|
+
super().__init__(*args, **kwargs)
|
12
|
+
self.task_queue = asyncio.Queue(n_parallel)
|
13
|
+
for i in range(n_parallel):
|
14
|
+
self.task_queue.put_nowait(i)
|
15
|
+
self.task_dict = {}
|
16
|
+
self.sem_report = asyncio.Semaphore(1)
|
17
|
+
|
18
|
+
async def report_attempt(self, mission: Mission, attempt: Attempt):
|
19
|
+
async with self.sem_report:
|
20
|
+
await super().report_attempt(mission, attempt)
|
21
|
+
|
22
|
+
async def run_all(self, tags: List[str]):
|
23
|
+
async def task(mission: Mission, attempt: Attempt, id: int):
|
24
|
+
attempt = await self.watchdog_mission(mission, attempt)
|
25
|
+
await self.task_queue.put(id)
|
26
|
+
return attempt
|
27
|
+
while True:
|
28
|
+
id = await self.task_queue.get()
|
29
|
+
async with self.sem_report:
|
30
|
+
mission = await self.get_mission(tags)
|
31
|
+
if mission is None:
|
32
|
+
break
|
33
|
+
attempt = HandlerInterface.create_attempt(self.session, mission, self.name, self.max_time_interval)
|
34
|
+
self.task_dict[id] = asyncio.create_task(task(mission, attempt, id))
|
35
|
+
for i in self.task_dict:
|
36
|
+
await self.task_dict[i]
|
37
|
+
del self.task_dict[i]
|
@@ -13,6 +13,7 @@ missionpanel/example/subprocess.py
|
|
13
13
|
missionpanel/example/ttrss.py
|
14
14
|
missionpanel/handler/__init__.py
|
15
15
|
missionpanel/handler/handler.py
|
16
|
+
missionpanel/handler/parallal_handler.py
|
16
17
|
missionpanel/orm/__init__.py
|
17
18
|
missionpanel/orm/core.py
|
18
19
|
missionpanel/orm/handler.py
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|