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.
Files changed (26) hide show
  1. {missionpanel-1.3.0 → missionpanel-1.4.0}/PKG-INFO +1 -1
  2. missionpanel-1.4.0/missionpanel/handler/__init__.py +3 -0
  3. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/handler/handler.py +2 -5
  4. missionpanel-1.4.0/missionpanel/handler/parallal_handler.py +37 -0
  5. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel.egg-info/PKG-INFO +1 -1
  6. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel.egg-info/SOURCES.txt +1 -0
  7. {missionpanel-1.3.0 → missionpanel-1.4.0}/setup.py +1 -1
  8. missionpanel-1.3.0/missionpanel/handler/__init__.py +0 -2
  9. {missionpanel-1.3.0 → missionpanel-1.4.0}/LICENSE +0 -0
  10. {missionpanel-1.3.0 → missionpanel-1.4.0}/README.md +0 -0
  11. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/__init__.py +0 -0
  12. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/example/__init__.py +0 -0
  13. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/example/rsshub.py +0 -0
  14. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/example/subprocess.py +0 -0
  15. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/example/ttrss.py +0 -0
  16. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/orm/__init__.py +0 -0
  17. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/orm/core.py +0 -0
  18. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/orm/handler.py +0 -0
  19. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/submitter/__init__.py +0 -0
  20. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/submitter/abc.py +0 -0
  21. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/submitter/asynchronous.py +0 -0
  22. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel/submitter/submitter.py +0 -0
  23. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel.egg-info/dependency_links.txt +0 -0
  24. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel.egg-info/requires.txt +0 -0
  25. {missionpanel-1.3.0 → missionpanel-1.4.0}/missionpanel.egg-info/top_level.txt +0 -0
  26. {missionpanel-1.3.0 → missionpanel-1.4.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: missionpanel
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  Summary: A mission panel
5
5
  Home-page: https://github.com/yindaheng98/missionpanel
6
6
  Author: yindaheng98
@@ -0,0 +1,3 @@
1
+ from .handler import Handler
2
+ from .handler import AsyncHandler
3
+ from .parallal_handler import ParallelAsyncHandler
@@ -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
- return await self.run_mission(mission)
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]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: missionpanel
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  Summary: A mission panel
5
5
  Home-page: https://github.com/yindaheng98/missionpanel
6
6
  Author: yindaheng98
@@ -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
@@ -12,7 +12,7 @@ package_dir = {
12
12
 
13
13
  setup(
14
14
  name='missionpanel',
15
- version='1.3.0',
15
+ version='1.4.0',
16
16
  author='yindaheng98',
17
17
  author_email='yindaheng98@gmail.com',
18
18
  url='https://github.com/yindaheng98/missionpanel',
@@ -1,2 +0,0 @@
1
- from .handler import Handler
2
- from .handler import AsyncHandler
File without changes
File without changes
File without changes