-
Notifications
You must be signed in to change notification settings - Fork 0
Tut2 Example2
Sung-June, Lim edited this page Oct 5, 2016
·
3 revisions
_tutorials
_tutorial2
example2
apps
Advanced_AsyncCall.py
blocks
MainWindow.py
P1.py
P2.py
P3.py
cyapp.py
cyapp_cfg.py
cymgr.py
cymgr_cfg.py
cycoord.py
cycoord_cfg.py

===

- t(title) : Application Title은 'Advanced Async Call : Mean, Standard Deviation'으로 사용
- B(Block) : 'MainWindow'의 별칭을 'main'으로, 'P1', 'P2', 'P3'의 별칭을 각각 'p1', 'p2, 'p3'으로 사용
- C(Connectivity) : -
- D(Data) : -
-
R(Reference) :
'main'에서 'p1'을 reference 'a'로 사용
'p1'에서 'p2'를 reference 'a'로 사용
'p1'에서 'p3'를 reference 'b'로 사용 - S(Slot) : -
def app_spec():
t = 'Advanced Async Call : Mean, Standard Deviation'
B = [('main', 'MainWindow', [], {}),
('p1', 'P1', [], {}),
('p2', 'P2', [], {}),
('p3', 'P3', [], {}),
]
C = []
D = dict(
note=dict()
)
R = [
('main', 'a', 'p1'),
('p1', 'a', 'p2'),
('p1', 'b', 'p3'),
]
S = [
]
return t, B, C, D, R, S- 모든 Block Class는 metaclass로 Block_meta를 사용
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QPushButton
from _qapp import create_task
from cyhub.block import Block_meta
class MainWindow(QtWidgets.QWidget, metaclass=Block_meta):
def __init__(self):
super().__init__()
layout = QtWidgets.QVBoxLayout()
self.setLayout(layout)
layout.addWidget(QPushButton('Calculate Mean && Standard Deviation (10, 8, 11, 6, 5, 12, 7)', clicked=self.on_calculate))
def initialize(self):
self.show()
@QtCore.pyqtSlot()
def on_calculate(self):
print('Button Clicked.')
async def _do():
val_mean, val_std = await self.a.calc_M_STD([10, 8, 11, 6, 5, 12, 7])
print('Calculated.')
return val_mean, val_std
create_task(_do()).then(lambda result: print('Mean : %f\nStandard Deviation : %f\n' % result))
print('Calculating...')- 모든 Block Class는 metaclass로 Block_meta를 사용
from PyQt5 import QtCore
from cyhub.block import Block_meta, cyhub_method
class P1(QtCore.QObject, metaclass=Block_meta):
@cyhub_method
async def calc_M_STD(self, values):
val_mean = await self.b.mean(values)
val_std = await self.a.standard_deviation(values, val_mean)
return val_mean, val_std- 모든 Block Class는 metaclass로 Block_meta를 사용
from PyQt5 import QtCore
from cyhub.block import Block_meta, cyhub_method
import math
class P2(QtCore.QObject, metaclass=Block_meta):
@cyhub_method
def standard_deviation(self, values, mean):
val_sum = 0
for v in values:
x = v - mean
x = x*x
val_sum += x
val_std = val_sum / len(values)
val_std = math.sqrt(val_std)
return val_std- 모든 Block Class는 metaclass로 Block_meta를 사용
from PyQt5 import QtCore
from cyhub.block import Block_meta, cyhub_method
import time
class P3(QtCore.QObject, metaclass=Block_meta):
@cyhub_method
def mean(self, values):
val_sum = 0
for v in values:
val_sum += v
val_mean = val_sum / len(values)
time.sleep(3)
return val_mean본 예제를 가장 잘 이해 하기 위해서는 4대의 Machine 환경이 필요합니다. 각각의 Machine에서 Coordinator, Manager1, Manager2, Application을 실행 할 것입니다. 따라서, 4대의 Machine 환경에서 실행 가능하도록 환경이 구축되어 있어야 합니다. (하지만, 편의상 Tutorial 시연을 위해 하나의 Machine에서 Coordinator, Manager1, Manager2, Application 모두 실행 가능)
이전 Example에서 작성한 cycoord_cfg.py, cymgr_cfg.py, cyapp_cfg.py 파일에서 cycode_prefix의 값을 example2의 위치로 변경하면 됩니다.
cycode_prefix = '_tutorials._tutorial2.example2'- Coordinator가 위치한 machine에서 cycoord.py 파일을 실행 합니다.
- Manager1이 위치한 machine에서 cymgr.py 파일을 실행합니다.
- Manager2이 위치한 machine에서 cymgr.py 파일을 실행합니다.
- Application이 위치한 machine에서 cyapp.py 파일을 실행 합니다.




