missionpanel 1.3.0__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.0 → missionpanel-1.4.0}/PKG-INFO +1 -1
- missionpanel-1.4.0/missionpanel/handler/__init__.py +3 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/handler/handler.py +2 -5
- missionpanel-1.4.0/missionpanel/handler/parallal_handler.py +37 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel.egg-info/PKG-INFO +1 -1
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel.egg-info/SOURCES.txt +1 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/setup.py +1 -1
- missionpanel-1.3.0/missionpanel/handler/__init__.py +0 -2
- {missionpanel-1.3.0 → missionpanel-1.4.0}/LICENSE +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/README.md +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/__init__.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/example/__init__.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/example/rsshub.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/example/subprocess.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/example/ttrss.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/orm/__init__.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/orm/core.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/orm/handler.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/submitter/__init__.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/submitter/abc.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/submitter/asynchronous.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/submitter/submitter.py +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel.egg-info/dependency_links.txt +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel.egg-info/requires.txt +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel.egg-info/top_level.txt +0 -0
- {missionpanel-1.3.0 → missionpanel-1.4.0}/setup.cfg +0 -0
@@ -112,15 +112,12 @@ class AsyncHandler(HandlerInterface, abc.ABC):
|
|
112
112
|
await self.report_attempt(mission, attempt)
|
113
113
|
return attempt
|
114
114
|
|
115
|
-
async def run_mission(self, mission: Mission):
|
116
|
-
attempt = HandlerInterface.create_attempt(self.session, mission, self.name, self.max_time_interval)
|
117
|
-
return await self.watchdog_mission(mission, attempt)
|
118
|
-
|
119
115
|
async def run_once(self, tags: List[str]):
|
120
116
|
mission = await self.get_mission(tags)
|
121
117
|
if mission is None:
|
122
118
|
return
|
123
|
-
|
119
|
+
attempt = HandlerInterface.create_attempt(self.session, mission, self.name, self.max_time_interval)
|
120
|
+
return await self.watchdog_mission(mission, attempt)
|
124
121
|
|
125
122
|
async def run_all(self, tags: List[str]):
|
126
123
|
while await self.run_once(tags):
|
@@ -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
|