dv-flow-mgr 0.0.1.12911707440a1__py3-none-any.whl → 0.0.1.12922457458a1__py3-none-any.whl
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.
- dv_flow/mgr/__init__.py +3 -0
- dv_flow/mgr/package_def.py +1 -1
- dv_flow/mgr/task_graph_builder.py +7 -1
- dv_flow/mgr/task_graph_runner_local.py +65 -7
- {dv_flow_mgr-0.0.1.12911707440a1.dist-info → dv_flow_mgr-0.0.1.12922457458a1.dist-info}/METADATA +2 -1
- {dv_flow_mgr-0.0.1.12911707440a1.dist-info → dv_flow_mgr-0.0.1.12922457458a1.dist-info}/RECORD +10 -10
- {dv_flow_mgr-0.0.1.12911707440a1.dist-info → dv_flow_mgr-0.0.1.12922457458a1.dist-info}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.12911707440a1.dist-info → dv_flow_mgr-0.0.1.12922457458a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.1.12911707440a1.dist-info → dv_flow_mgr-0.0.1.12922457458a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.12911707440a1.dist-info → dv_flow_mgr-0.0.1.12922457458a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/__init__.py
CHANGED
@@ -3,4 +3,7 @@ from .package_def import *
|
|
3
3
|
from .task_graph_runner import *
|
4
4
|
from .task import *
|
5
5
|
from .task_data import *
|
6
|
+
from .task_graph_runner import TaskGraphRunner
|
7
|
+
from .task_graph_runner_local import TaskGraphRunnerLocal
|
8
|
+
from .task_graph_builder import TaskGraphBuilder
|
6
9
|
|
dv_flow/mgr/package_def.py
CHANGED
@@ -70,6 +70,13 @@ class TaskGraphBuilder(object):
|
|
70
70
|
|
71
71
|
depends = []
|
72
72
|
|
73
|
+
for dep in ctor_t.depends:
|
74
|
+
if not dep in self._task_m.keys():
|
75
|
+
task = self._mkTaskGraph(dep, rundir)
|
76
|
+
self._task_m[dep] = task
|
77
|
+
pass
|
78
|
+
depends.append(self._task_m[dep])
|
79
|
+
|
73
80
|
# The returned task should have all param references resolved
|
74
81
|
print("task_ctor=%s" % str(ctor_t.task_ctor), flush=True)
|
75
82
|
task = ctor_t.task_ctor(
|
@@ -99,7 +106,6 @@ class TaskGraphBuilder(object):
|
|
99
106
|
print("getPackage: %s len: %d" % (spec.name, len(self._pkg_spec_s)))
|
100
107
|
if len(self._pkg_spec_s) > 0:
|
101
108
|
pkg_spec = self._pkg_spec_s[-1]
|
102
|
-
print("pkg_spec: %s ; root_pkg: %s" % (pkg_spec.name, self.root_pkg.name))
|
103
109
|
if self.root_pkg.name == pkg_spec.name:
|
104
110
|
pkg_def = self.root_pkg
|
105
111
|
else:
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#****************************************************************************
|
2
|
-
#*
|
2
|
+
#* task_graph_runner_local.py
|
3
3
|
#*
|
4
4
|
#* Copyright 2023 Matthew Ballance and Contributors
|
5
5
|
#*
|
@@ -23,7 +23,8 @@ import asyncio
|
|
23
23
|
import os
|
24
24
|
import yaml
|
25
25
|
import dataclasses as dc
|
26
|
-
from
|
26
|
+
from toposort import toposort
|
27
|
+
from typing import Any, Callable, ClassVar, Coroutine, Dict, List, Tuple, Union
|
27
28
|
from .fragment_def import FragmentDef
|
28
29
|
from .package import Package
|
29
30
|
from .pkg_rgy import PkgRgy
|
@@ -37,7 +38,8 @@ class TaskGraphRunnerLocal(TaskGraphRunner):
|
|
37
38
|
"""Session manages execution of a task graph"""
|
38
39
|
|
39
40
|
rundir : str
|
40
|
-
nproc : int =
|
41
|
+
nproc : int = 4
|
42
|
+
done_task_m : Dict = dc.field(default_factory=dict)
|
41
43
|
_workers : List = dc.field(default_factory=list)
|
42
44
|
|
43
45
|
_inst : ClassVar['TaskGraphRunner'] = None
|
@@ -58,11 +60,66 @@ class TaskGraphRunnerLocal(TaskGraphRunner):
|
|
58
60
|
|
59
61
|
async def run(self, task : Union[Task,List[Task]]) -> List['TaskData']:
|
60
62
|
if isinstance(task, Task):
|
63
|
+
unwrap = True
|
61
64
|
task = [task]
|
62
|
-
|
63
|
-
|
65
|
+
else:
|
66
|
+
unwrap = False
|
67
|
+
|
68
|
+
dep_m = {}
|
69
|
+
task_m = {}
|
70
|
+
|
71
|
+
for t in task:
|
72
|
+
self._mkDeps(dep_m, task_m, t)
|
73
|
+
|
74
|
+
print("dep_m: %s" % str(dep_m))
|
75
|
+
|
76
|
+
order = list(toposort(dep_m))
|
77
|
+
|
78
|
+
active_task_l : List[Tuple[Task,Coroutine]]= []
|
79
|
+
# Now, iterate over the concurrent sets
|
80
|
+
for active_s in order:
|
64
81
|
|
65
|
-
|
82
|
+
# Check to see if all tasks are complete
|
83
|
+
done = True
|
84
|
+
for t in active_s:
|
85
|
+
while len(active_task_l) >= self.nproc and t not in self.done_task_m.keys():
|
86
|
+
# Wait for at least one job to complete
|
87
|
+
done, pending = await asyncio.wait(at[1] for at in active_task_l)
|
88
|
+
for d in done:
|
89
|
+
for i in range(len(active_task_l)):
|
90
|
+
if active_task_l[i][1] == d:
|
91
|
+
tt = active_task_l[i][0]
|
92
|
+
self.done_task_m[tt.name] = tt
|
93
|
+
active_task_l.pop(i)
|
94
|
+
break
|
95
|
+
if t not in self.done_task_m.keys():
|
96
|
+
task = task_m[t]
|
97
|
+
coro = asyncio.Task(task.do_run())
|
98
|
+
active_task_l.append((task, coro))
|
99
|
+
|
100
|
+
# Now, wait for tasks to complete
|
101
|
+
if len(active_task_l):
|
102
|
+
coros = list(at[1] for at in active_task_l)
|
103
|
+
res = await asyncio.gather(*coros)
|
104
|
+
|
105
|
+
# print("order: %s" % str(order))
|
106
|
+
#
|
107
|
+
# run_o = list(t.do_run() for t in task)
|
108
|
+
|
109
|
+
# ret = await asyncio.gather(*run_o)
|
110
|
+
ret = None
|
111
|
+
|
112
|
+
if unwrap:
|
113
|
+
return task.output
|
114
|
+
else:
|
115
|
+
return list(t.output for t in task)
|
116
|
+
|
117
|
+
def _mkDeps(self, dep_m, task_m, task):
|
118
|
+
if task.name not in dep_m.keys():
|
119
|
+
task_m[task.name] = task
|
120
|
+
dep_m[task.name] = set(t.name for t in task.depends)
|
121
|
+
for d in task.depends:
|
122
|
+
self._mkDeps(dep_m, task_m, d)
|
66
123
|
|
67
124
|
async def runTask(self, task : Task) -> 'TaskData':
|
68
125
|
return await task.do_run()
|
@@ -74,6 +131,7 @@ class TaskGraphRunnerLocal(TaskGraphRunner):
|
|
74
131
|
@dc.dataclass
|
75
132
|
class LocalRunnerWorker(object):
|
76
133
|
runner : TaskGraphRunnerLocal
|
77
|
-
|
134
|
+
task_s : List = dc.field(default_factory=list)
|
135
|
+
|
78
136
|
|
79
137
|
|
{dv_flow_mgr-0.0.1.12911707440a1.dist-info → dv_flow_mgr-0.0.1.12922457458a1.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: dv-flow-mgr
|
3
|
-
Version: 0.0.1.
|
3
|
+
Version: 0.0.1.12922457458a1
|
4
4
|
Summary: DV Flow Manager is a build system for silicon design
|
5
5
|
Author-email: Matthew Ballance <matt.ballance@gmail.com>
|
6
6
|
License: Apache License
|
@@ -206,6 +206,7 @@ License: Apache License
|
|
206
206
|
limitations under the License.
|
207
207
|
|
208
208
|
License-File: LICENSE
|
209
|
+
Requires-Dist: pydantic
|
209
210
|
Requires-Dist: pyyaml
|
210
211
|
Requires-Dist: toposort
|
211
212
|
Requires-Dist: svdep
|
{dv_flow_mgr-0.0.1.12911707440a1.dist-info → dv_flow_mgr-0.0.1.12922457458a1.dist-info}/RECORD
RENAMED
@@ -1,19 +1,19 @@
|
|
1
|
-
dv_flow/mgr/__init__.py,sha256=
|
1
|
+
dv_flow/mgr/__init__.py,sha256=VtQfTiskn-fBaWU18s8odFPMDJ1Lx2DD4Y4Uy5EJ0Qs,261
|
2
2
|
dv_flow/mgr/__main__.py,sha256=pHXC_c-XSPUYQsBDxk5y7LtQ5kA5pKGhhzu4ko5jh7k,513
|
3
3
|
dv_flow/mgr/fileset.py,sha256=FNvC5sU2ArxJ0OO3v8dXTv8zX-bZ5t0a0ljne0fQQ1o,1150
|
4
4
|
dv_flow/mgr/flow.py,sha256=UdgJOIqBS2wTRpO-sNWCCqO9oQFxDfGPGVD0r42aTrA,1562
|
5
5
|
dv_flow/mgr/fragment_def.py,sha256=p5i6ONtBWlDHTBFsduu3Z36_76Bn8PCIylp_xoZ7jfQ,1552
|
6
6
|
dv_flow/mgr/package.py,sha256=k6gaDun9mJeGwGsFP5YOYOaFLmKb3KyPZy5wGRgJd_E,1965
|
7
|
-
dv_flow/mgr/package_def.py,sha256=
|
7
|
+
dv_flow/mgr/package_def.py,sha256=fdPzhoCqZ-w336ktDVWZ1HKKFk9Zi6iehCcS-iW_EvU,11454
|
8
8
|
dv_flow/mgr/package_import_spec.py,sha256=bStPa727wAKMcixydVY1Ht6ylzXsSMy2K31HWPXhc9k,921
|
9
9
|
dv_flow/mgr/parameters.py,sha256=kUjRss5VtMMz5eL3-Z_M6BS-wFs7MhQu3ANXO54UPo0,896
|
10
10
|
dv_flow/mgr/pkg_rgy.py,sha256=y7HOBZAgKHL4ItnFvjT0lWC_ne81qJi4lJGNLt69au0,2581
|
11
11
|
dv_flow/mgr/task.py,sha256=gaMlOiV4pKmEBzewTkVle3RN2zfKPkSdYW3oJX0j_Jg,6421
|
12
12
|
dv_flow/mgr/task_data.py,sha256=-6Dqa3oUI7RJc1Js2SRSnhxNTcASkamXFYMN6UiknZQ,10376
|
13
13
|
dv_flow/mgr/task_def.py,sha256=96hSwqJo0MazJ1VcLhovYRmNCplsNLt47AumtyjSddU,1690
|
14
|
-
dv_flow/mgr/task_graph_builder.py,sha256=
|
14
|
+
dv_flow/mgr/task_graph_builder.py,sha256=8G9Q-eC0OZmHw0V3F1CxCkXzDZWrYnfVFJ9hQET9RAY,7376
|
15
15
|
dv_flow/mgr/task_graph_runner.py,sha256=x2e-wpJFhZ4Zkov30PtC8CuKyOK6htA1SKzmrcVBI9M,2154
|
16
|
-
dv_flow/mgr/task_graph_runner_local.py,sha256
|
16
|
+
dv_flow/mgr/task_graph_runner_local.py,sha256=QDCUyFj_m4hJTUsZD5nCUCnPu3hysdk65-gVA8eJ894,4546
|
17
17
|
dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
|
18
18
|
dv_flow/mgr/util.py,sha256=WKwMF4vwYdte5wzieSTDpZTmZU0sjQro3Ofi9moCayE,613
|
19
19
|
dv_flow/mgr/cmds/cmd_run.py,sha256=PqAbPMwqovaaq14tnNrCvP7-De8lMI09X0R7d6RIbwY,2691
|
@@ -23,9 +23,9 @@ dv_flow/mgr/std/flow.dv,sha256=pSpzrPPEu_L8DHccGfArxsKYgUfyQidShZc0ShgGtsY,500
|
|
23
23
|
dv_flow/mgr/std/message.py,sha256=BPTHnEMD4tBufQ9LvsS9Sa_0xjaJATbBpwqosWslvVA,193
|
24
24
|
dv_flow/mgr/std/task_fileset.py,sha256=UzTYONvK0X9rgy3rP9LiX4giBU8SyCCJav0LSNUJ1Qg,3140
|
25
25
|
dv_flow/mgr/std/task_null.py,sha256=UEJ3fIoIMYWVsagiQC7GHD23UES7WoH4wtq94b4tcs4,265
|
26
|
-
dv_flow_mgr-0.0.1.
|
27
|
-
dv_flow_mgr-0.0.1.
|
28
|
-
dv_flow_mgr-0.0.1.
|
29
|
-
dv_flow_mgr-0.0.1.
|
30
|
-
dv_flow_mgr-0.0.1.
|
31
|
-
dv_flow_mgr-0.0.1.
|
26
|
+
dv_flow_mgr-0.0.1.12922457458a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
27
|
+
dv_flow_mgr-0.0.1.12922457458a1.dist-info/METADATA,sha256=Rsa9WygYLLdeeSpss1f5HJ4ZGwGjrlobtza7ZjNnXIs,13276
|
28
|
+
dv_flow_mgr-0.0.1.12922457458a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
29
|
+
dv_flow_mgr-0.0.1.12922457458a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
30
|
+
dv_flow_mgr-0.0.1.12922457458a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
31
|
+
dv_flow_mgr-0.0.1.12922457458a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.1.12911707440a1.dist-info → dv_flow_mgr-0.0.1.12922457458a1.dist-info}/LICENSE
RENAMED
File without changes
|
{dv_flow_mgr-0.0.1.12911707440a1.dist-info → dv_flow_mgr-0.0.1.12922457458a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|