示例#1
0
 def __init__(self, buffer_size=5):
     self.buffer_size = buffer_size
     self.free_slots = QSemaphore(self.buffer_size)
     self.used_slots = QSemaphore(0)
     self.clear_buffer_add = QSemaphore(1)
     self.clear_buffer_get = QSemaphore(1)
     self.queue_mutex = QMutex()
     self.queue = Queue(self.buffer_size)
示例#2
0
 def __init__(self, size):
     # Save buffer size
     self.bufferSize = size
     # Create semaphores
     self.freeSlots = QSemaphore(self.bufferSize)
     self.usedSlots = QSemaphore(0)
     self.clearBuffer_add = QSemaphore(1)
     self.clearBuffer_get = QSemaphore(1)
     # Create mutex
     self.queueProtect = QMutex()
     # Create queue
     self.queue = Queue(self.bufferSize)
示例#3
0
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)
        self.init_Ui()
        self.com = Common()
        self.title = [
            u"COUNT", u"CPU(%)", u"MEM(M)", u"FPS", u"Wifi下行(KB/S)",
            u"Wifi上行(KB/S)", u"下载流量(MB)", u"上传流量(MB)", u"Wifi总流量(MB)",
            u"移动网络下行(KB/S)", u"移动网络上行(KB/S)", u"下载流量(MB)", u"上传流量(MB)",
            u"移动网络总流量(MB)", u"温度", "Drawcall", u"电量"
        ]
        self.excel_path = "D:\PerfReport"
        # self.create_excel()
        self.getData = 0

        BufferSize = 1  #同时并发的线程数
        FpsS = QSemaphore(BufferSize)  # cpu并发锁
        CpuS = QSemaphore(0)
        DrawcallS = QSemaphore(0)
        NetS = QSemaphore(0)
        MemS = QSemaphore(0)
        TempS = QSemaphore(0)
        BatteryS = QSemaphore(0)
        TimeS = QSemaphore(0)
        self.lock = {}  #并发锁词典
        self.lock['cpu'] = CpuS
        self.lock['fps'] = FpsS
        self.lock['drawcall'] = DrawcallS
        self.lock['net'] = NetS
        self.lock['mem'] = MemS
        self.lock['temp'] = TempS
        self.lock['battery'] = BatteryS
        self.lock['time'] = TimeS
        self.dw = Draw()
        self.isCollect = 0
示例#4
0
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.sem_for_timer = QSemaphore()

        self.reader_Thread = QThread()
        self.reader = ConsoleReader(self.sem_for_timer,
                                    self.semaphore_start_reading)
        self.reader.moveToThread(self.reader_Thread)

        # self.timerThread = QThread()
        # self.timer = Timer(self.sem_for_timer, self.reader_Thread)
        # self.timer.moveToThread(self.timerThread)

        self.writer_Thread = QThread()
        self.writer = ConsoleWriter(self.semaphore_start_reading)
        self.writer.moveToThread(self.writer_Thread)

        self.thr_read = Thread(target=self.ff)
        self.thr_write = Thread(target=self.ww)
        # self.thr_timer = Thread(target=self.gg)

        self.ui.startBt.clicked.connect(self.startProcess)
        # self.writer.process_created.connect(self.pp)
        # self.writer.process_created.connect(self.reader.set_pipe)
        self.ui.sendBt.clicked.connect(self.addInput)
        self.writer.value_entered.connect(self.semaphore_start_reading.release)
        self.reader.readed.connect(self.addToConsole)
        # self.timer.timeout.connect(self.newThread)

        self.writer_Thread.start()
        # self.timerThread.start()
        self.reader_Thread.start()
示例#5
0
    def __init__(self, aw):
        self.aw = aw

        self.readRetries = 1
        self.channels = 10  # maximal number of S7 channels
        self.host = '127.0.0.1'  # the TCP host
        self.port = 102  # the TCP port
        self.rack = 0  # 0,..,7
        self.slot = 0  # 0,..,31

        self.lastReadResult = 0  # this is set by eventaction following some custom button/slider S/ actions with "read" command

        self.area = [0] * self.channels
        self.db_nr = [1] * self.channels
        self.start = [0] * self.channels
        self.type = [
            0
        ] * self.channels  # type 0 => int, type 1 => float, type 2 => intFloat
        #  type 3 => Bool(0), type 4 => Bool(1), type 5 => Bool(2), type 6 => Bool(3), type 7 => Bool(4), type 8 => Bool(5), type 9 => Bool(6), type 10 => Bool(7)
        self.mode = [
            0
        ] * self.channels  # temp mode is an int here, 0:__,1:C,2:F (this is different than other places)
        self.div = [0] * self.channels

        self.optimizer = True  # if set, values of consecutive register addresses are requested in single requests
        self.fetch_max_blocks = False  # if set, the optimizer fetches only one sequence per area from the minimum to the maximum register ignoring gaps
        # S7 areas associated to dicts associating S7 DB numbers to start registers in use
        # for optimized read of full register segments with single requests
        # this dict is re-computed on each connect() by a call to updateActiveRegisters()
        # NOTE: for registers of type float (32bit = 2x16bit) also the succeeding register is registered here
        self.activeRegisters = {}
        # the readings cache that is filled by requesting sequences of values in blocks
        self.readingsCache = {}

        self.PID_area = 0
        self.PID_db_nr = 0
        self.PID_SV_register = 0
        self.PID_p_register = 0
        self.PID_i_register = 0
        self.PID_d_register = 0
        self.PID_ON_action = ""
        self.PID_OFF_action = ""
        self.PIDmultiplier = 0
        self.SVtype = 0
        self.SVmultiplier = 0

        self.COMsemaphore = QSemaphore(1)

        self.areas = [
            0x81,  # PE
            0x82,  # PA
            0x83,  # MK
            0x1C,  # CT
            0x1D,  # TM
            0x84,  # DB
        ]

        self.plc = None
        self.commError = False  # True after a communication error was detected and not yet cleared by receiving proper data
        self.libLoaded = False
示例#6
0
    def __init__(self, sendmessage, adderror, addserial, aw):
        self.sendmessage = sendmessage  # function to create an Artisan message to the user in the message line
        self.adderror = adderror  # signal an error to the user
        self.addserial = addserial  # add to serial log
        self.aw = aw

        # retries
        self.readRetries = 1
        #default initial settings. They are changed by settingsload() at initiation of program acording to the device chosen
        self.comport = "COM5"  #NOTE: this string should not be translated.
        self.baudrate = 115200
        self.bytesize = 8
        self.parity = 'N'
        self.stopbits = 1
        self.timeout = 1.0
        self.PID_slave_ID = 0
        self.PID_SV_register = 0
        self.PID_p_register = 0
        self.PID_i_register = 0
        self.PID_d_register = 0
        self.PID_ON_action = ""
        self.PID_OFF_action = ""

        self.channels = 8
        self.inputSlaves = [0] * self.channels
        self.inputRegisters = [0] * self.channels
        self.inputFloats = [False] * self.channels
        self.inputBCDs = [False] * self.channels
        self.inputCodes = [3] * self.channels
        self.inputDivs = [0] * self.channels  # 0: none, 1: 1/10, 2:1/100
        self.inputModes = ["C"] * self.channels

        self.optimizer = True  # if set, values of consecutive register addresses are requested in single requests
        # MODBUS functions associated to dicts associating MODBUS slave ids to registers in use
        # for optimized read of full register segments with single requests
        # this dict is re-computed on each connect() by a call to updateActiveRegisters()
        # NOTE: for registers of type float and BCD (32bit = 2x16bit) also the succeeding register is registered here
        self.activeRegisters = {}
        # the readings cache that is filled by requesting sequences of values in blocks
        self.readingsCache = {}

        self.SVmultiplier = 0
        self.PIDmultiplier = 0
        self.byteorderLittle = False
        self.wordorderLittle = True
        self.master = None
        self.COMsemaphore = QSemaphore(1)
        self.host = '127.0.0.1'  # the TCP/UDP host
        self.port = 502  # the TCP/UDP port
        self.type = 0
        # type =
        #    0: Serial RTU
        #    1: Serial ASCII
        #    2: Serial Binary
        #    3: TCP
        #    4: UDP
        self.lastReadResult = 0  # this is set by eventaction following some custom button/slider Modbus actions with "read" command

        self.commError = False  # True after a communication error was detected and not yet cleared by receiving proper data
示例#7
0
 def __init__(self, self_id, message_manager, election_time=5):
     super().__init__()
     self.id = self_id
     self.message_manager = message_manager
     self.semaphore = QSemaphore(1)
     self.self_elected = True
     self.election_timer = election_time
     self.message_manager.signal_candidate_found.connect(
         self.candidate_found)
示例#8
0
 def read(self, *data):
     id = self.__getRandomId()
     sem = QSemaphore(1)
     sem.acquire()
     self.queue.put({'type': 'read', 'data': list(data), 'id': id, 'sem': sem})
     # wait for release the semaphore
     sem.acquire()
     state = self.ids[id]
     del self.ids[id]
     return state
示例#9
0
文件: main1.py 项目: aisyluG/LR3
class Window(QMainWindow):
    semaphore = QSemaphore()
    input_sended = pyqtSignal()
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.input = None
        # self.thr = Thread().
        self.timer = QTimer()
        self.reader_Thread = QThread()
        self.reader = ConsoleReader(self.semaphore, self.timer)
        self.reader.moveToThread(self.reader_Thread)

        self.writer_Thread = QThread()
        self.writer = ConsoleWriter(self.semaphore)
        self.writer.moveToThread(self.writer_Thread)

        self.ui.startBt.clicked.connect(self.startProcess)
        self.writer.process_created.connect(self.pp)
        # self.writer.process_created.connect(self.reader.set_pipe)
        self.reader.readed.connect(self.addToConsole)
        self.ui.sendBt.clicked.connect(self.addInput)
        # self.timer.timeout.connect(self.ii)
        # self.timer.timeout.connect(self.timer.stop)

        self.reader_Thread.start()
        self.writer_Thread.start()


    def ii(self):
        print('stopped')
        # self.reader_Thread.terminate()
        self.reader.thread().wait()

    def pp(self, process):
        self.reader.set_pipe(process)

    def addToConsole(self, output):
        self.ui.outputText.append(output)

    def startProcess(self):
        path = self.ui.comandLine.text()
        if '\\' in path:
            path = path.replace('\\', '/')
            # print(path)
        self.writer.createProcess(path)
        self.reader.run()

    def addInput(self):
        input = self.ui.inputText.text()
        self.writer.write(input)
        self.ui.outputText.append('>'+input)
示例#10
0
 def establishSqliteConnection(self, dbFileName: str):
     self.name = dbFileName
     self.dbsemaphore = QSemaphore(
         1)  # to control concurrent write access to db
     self.engine = create_engine(
         'sqlite:///{dbFileName}'.format(dbFileName=dbFileName))
     self.session = scoped_session(sessionmaker())
     self.session.configure(bind=self.engine, autoflush=False)
     self.metadata = Base.metadata
     self.metadata.create_all(self.engine)
     self.metadata.echo = True
     self.metadata.bind = self.engine
示例#11
0
 def connect(self, dbfilename):
     self.name = dbfilename
     self.dbsemaphore = QSemaphore(
         1)  # to control concurrent write access to db
     self.engine = create_engine('sqlite:///' + dbfilename,
                                 connect_args={"check_same_thread": False})
     self.session = scoped_session(sessionmaker())
     self.session.configure(bind=self.engine, autoflush=False)
     self.metadata = Base.metadata
     self.metadata.create_all(self.engine)
     self.metadata.echo = True
     self.metadata.bind = self.engine
示例#12
0
 def __init__(self):
     # a dictionary associating all physical attached Phidget channels
     # to their availablility state:
     #    True: available for attach to a software channel
     #    False: occupied and connected to a software channel
     # access to this dict is protected by the managersemaphore and
     # should happen only via the methods addChannel and deleteChannel
     self.attachedPhidgetChannels = {}
     self.managersemaphore = QSemaphore(1)
     self.manager = Manager()
     self.manager.setOnAttachHandler(self.attachHandler)
     self.manager.setOnDetachHandler(self.detachHandler)
     self.manager.open()
示例#13
0
 def delay_method_call(self, *args, **kwargs):
     if self.thread() != QThread.currentThread():
         semaphore = QSemaphore()
     else:
         semaphore = None
     event = QueuedCallEvent(method, (self, ) + args, kwargs, semaphore)
     QCoreApplication.postEvent(self, event)
     if semaphore is None:
         QCoreApplication.sendPostedEvents()
     else:
         # Wait until the other thread's event loop processes the event
         semaphore.acquire()
     return event.result()
示例#14
0
文件: database.py 项目: yut0u/legion
 def openDB(self, dbfilename):
     try:
         self.name = dbfilename
         self.dbsemaphore = QSemaphore(1)                            # to control concurrent write access to db
         self.engine = create_engine('sqlite:///{dbFileName}'.format(dbFileName = dbfilename)) #, poolclass=SingletonThreadPool)
         self.session = scoped_session(sessionmaker())
         self.session.configure(bind = self.engine, autoflush=False)
         self.metadata = Base.metadata
         self.metadata.create_all(self.engine)
         self.metadata.echo = True
         self.metadata.bind = self.engine
     except:
         log.info('Could not open database file. Is the file corrupted?')
示例#15
0
文件: mainApp.py 项目: Xiul109/VEEGS
    def _play(self):
        #Input values
        start = float(self.startInput.text())
        stop = float(self.stopInput.text())

        #If state is PAUSE skip these steps
        if self.state != "PAUSE":
            self.timePosition = start

            #Iterator preparation
            sampleRate = self.eegSettings["sampleRate"]
            iterStep = int(round(sampleRate * self.simDelay))
            iterStart = int(start * sampleRate)
            iterStop = int(stop * sampleRate)
            #simDelay correction for int aproximation
            self.simDelay = iterStep / sampleRate

            self.iterator = iter(self.helper[iterStart:iterStop:iterStep])

            #Next iteration to test if values are correct
            try:
                next(self.iterator)
            except StopIteration:
                QtWidgets.QMessageBox.warning(
                    self, "Error", "The start and stop points are too close",
                    QtWidgets.QMessageBox.Ok)
                return
            #Initialize animations of windows
            for window in self.windowList:
                window.initAnimation(start)

        #Init semaphore and loopTrigger
        self.semaphore = QSemaphore(0)
        loop = LoopTrigger(self.semaphore, minDelay=self.rtDelay)
        self.loop = loop

        #Connect signals
        loop.sigUpdate.connect(self.__updateFields)
        loop.sigUpdate.connect(self.__playAnimation)

        self.stopSignal.connect(loop.stop)

        #Init thread
        self.loopThread = QThread()
        loop.moveToThread(self.loopThread)
        self.loopThread.started.connect(loop.loop)
        self.loopThread.start()

        #Set new state
        self.__setState("PLAY")
示例#16
0
文件: database.py 项目: yut0u/legion
 def __init__(self, dbfilename):
     try:
         self.name = dbfilename
         self.dbsemaphore = QSemaphore(1)                            # to control concurrent write access to db
         self.engine = create_engine('sqlite:///{dbFileName}'.format(dbFileName = dbfilename)) #, poolclass=SingletonThreadPool)
         self.session = scoped_session(sessionmaker())
         self.session.configure(bind = self.engine, autoflush=False)
         self.metadata = Base.metadata
         self.metadata.create_all(self.engine)
         self.metadata.echo = True
         self.metadata.bind = self.engine
     except Exception as e:
         log.info('Could not create database. Please try again.')
         log.info(e)
示例#17
0
    def __init__(self, sendmessage, adderror, addserial):
        self.sendmessage = sendmessage  # function to create an Artisan message to the user in the message line
        self.adderror = adderror  # signal an error to the user
        self.addserial = addserial  # add to serial log

        self.readRetries = 1
        self.channels = 8  # maximal number of S7 channels
        self.host = '127.0.0.1'  # the TCP host
        self.port = 102  # the TCP port
        self.rack = 0  # 0,..,7
        self.slot = 0  # 0,..,31

        self.lastReadResult = 0  # this is set by eventaction following some custom button/slider S/ actions with "read" command

        self.area = [0] * self.channels
        self.db_nr = [1] * self.channels
        self.start = [0] * self.channels
        self.type = [0] * self.channels
        self.mode = [
            0
        ] * self.channels  # temp mode is an int here, 0:__,1:C,2:F (this is different than other places)
        self.div = [0] * self.channels

        self.PID_area = 0
        self.PID_db_nr = 0
        self.PID_SV_register = 0
        self.PID_p_register = 0
        self.PID_i_register = 0
        self.PID_d_register = 0
        self.PID_ON_action = ""
        self.PID_OFF_action = ""
        self.SVmultiplier = 0
        self.PIDmultiplier = 0

        self.COMsemaphore = QSemaphore(1)

        self.areas = [
            0x81,  # PE
            0x82,  # PA
            0x83,  # MK
            0x1C,  # CT
            0x1D,  # TM
            0x84,  # DB
        ]

        self.plc = None
        self.commError = False  # True after a communication error was detected and not yet cleared by receiving proper data
示例#18
0
class Window(QtWidgets.QMainWindow):
    #семафор для работы потока
    sem = QSemaphore()

    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        #создаем и привязываем свою модель к представлению
        self.model = TableModel()
        self.ui.tableView.setModel(self.model)
        self.ui.tableView.resizeColumnsToContents()

        # создаем и устанавливаем в представление в столбец 1 делегат для выпадающего списка
        self.delegate = DelegateComboBox(self.ui.tableView, 1)
        self.ui.tableView.setEditTriggers(
            QtWidgets.QAbstractItemView.DoubleClicked
            | QtWidgets.QAbstractItemView.CurrentChanged
            | QtWidgets.QAbstractItemView.SelectedClicked)
        self.ui.tableView.setItemDelegateForColumn(1, self.delegate)

        #обработка сигнала от кнопки Random
        self.ui.btRandomNumbers.clicked.connect(self.autoFillTable)
        #обработка сигнала от кнопки Resize
        self.ui.btResizeTable.clicked.connect(self.resizeTableView)
        #обработка выбора столбцов в таблице
        #self.ui.tableView.model().dataChanged.connect(self.currentChangedInTableView)
        #self.ui.tableView.model().dataChanged.connect(self.plotFromSelectedColumn)

        #добавляем действия в меню для загрузки данных из файла
        #HDF
        self.openFileHdf = QtWidgets.QAction('Open from hdf', self)
        self.openFileHdf.setStatusTip('Open file')
        self.ui.menuHdf.addAction(self.openFileHdf)
        #TXT
        self.openFileTxt = QtWidgets.QAction('Open from txt', self)
        self.openFileTxt.setStatusTip('Open file')
        self.ui.menuTxt.addAction(self.openFileTxt)

        #добавляем действия в менб для загрузки данных в файл
        #HDF
        self.saveFileHdf = QtWidgets.QAction('Save as hdf', self)
        self.saveFileHdf.setStatusTip('Save to file')
        self.ui.menuHdf.addAction(self.saveFileHdf)
        #TXT
        self.saveFileTxt = QtWidgets.QAction('Save as txt', self)
        self.saveFileTxt.setStatusTip('Save to file')
        self.ui.menuTxt.addAction(self.saveFileTxt)

        #добавляем обработчики событий
        self.openFileHdf.triggered.connect(self.loadData)
        self.openFileTxt.triggered.connect(self.loadData)
        self.saveFileHdf.triggered.connect(self.saveData)
        self.saveFileTxt.triggered.connect(self.saveData)

        #создаем timer с инетрвалом 1с чтобы он вызывал функцию рисования графика через некоторое время после выбора столбцов
        #так как у меня основной поток не вовремя вызывает обработчик сигнала (данные о выборе не успевают обновлятся)
        self.t = QtCore.QTimer(self)
        self.t.timeout.connect(self.plotFromSelectedColumn)
        self.t.start(1000)

        # создаем поток с интервалом 1с чтобы он вызывал функцию рисования графика через некоторое время после выбора столбцов
        # self.t = ClockThread(1, self.sem)
        # self.t.timeout.connect(self.plotFromSelectedColumn)
        # self.t.start()

    #вызывается при измении размеров окна
    def resizeEvent(self, a0: QtGui.QResizeEvent):
        winHeight = self.height()
        winWidth = self.width()
        #изменяем размеры таблицы-представления
        self.ui.tableView.resize(winWidth - 200, int(winHeight * 0.6))
        #изменяем размеры виджета-графика
        self.ui.graphWidget.setGeometry(0,
                                        int(winHeight * 0.6) + 3, winWidth,
                                        int(winHeight * 0.4) - 25)
        #изменяем положение кнопок и надписей
        self.ui.groupBox.setGeometry(
            QRect(winWidth - 200, 0, 200, self.ui.tableView.height()))

    #вызывается при нажатии на кнопку автозаполнения
    def autoFillTable(self):
        self.ui.tableView.model().autoFill()

    #вызывается при нажатии на кнопку измения размера таблицы
    def resizeTableView(self):
        #вызываем у модели метод изменения ее размеров
        self.ui.tableView.model().resize(int(self.ui.spBoxRows.text()),
                                         int(self.ui.spBoxColumns.text()))

    #вызывается при изменении выделения в представлении
    #для разблокировки потока
    def currentChangedInTableView(self):
        #разблокировываем поток
        self.sem.release()

    #метод для рисования графика
    def plotFromSelectedColumn(self):
        #очищаем холст
        self.ui.graphWidget.clear()
        columns = set()
        for a in self.ui.tableView.selectedIndexes():
            columns.add(a.column())
        #если выделено 2 столбца
        if len(columns) == 2:
            #получаем значения из модели
            values = zip(self.ui.tableView.model().columnValues(columns.pop()),
                         self.ui.tableView.model().columnValues(columns.pop()))
            #сортируем
            x, y = list(zip(*sorted(values)))
            #отрисовываем график
            self.ui.graphWidget.plot(x, y)

    #вызывается при нажатии на кнопку сохранения
    def saveData(self):
        try:
            if self.sender().text() == 'Save as txt':
                #получаем путь к файлу
                fname, _ = QtWidgets.QFileDialog.getSaveFileName(
                    self, 'Save file', '/data.txt',
                    'Текстовые документы (*.txt)')
                #передаем название файла модели
                self.ui.tableView.model().saveAsTxt(fname)
            else:
                # получаем путь к файлу
                fname, _ = QtWidgets.QFileDialog.getSaveFileName(
                    self, 'Save file', '/data.hdf5', 'HDF (*.hdf5)')
                # передаем название файла модели
                self.ui.tableView.model().saveAsHdf(fname)
        except Exception:
            QtWidgets.QMessageBox.about(self, ' ', 'Error')

    #вызывается при нажатии на кнопку загрузки
    def loadData(self):
        try:
            if self.sender().text() == 'Open from txt':
                # получаем путь к файлу
                fname, _ = QtWidgets.QFileDialog.getOpenFileName(
                    self, 'Open file', '/data.txt',
                    'Текстовые документы (*.txt)')
                # передаем название файла модели
                self.ui.tableView.model().loadFromTxt(fname)
            else:
                # получаем путь к файлу
                fname, _ = QtWidgets.QFileDialog.getOpenFileName(
                    self, 'Open file', '/data.hdf5', 'HDF (*.hdf5)')
                # передаем название файла модели
                self.ui.tableView.model().loadFromHdf(fname)

            self.ui.tableView.resizeColumnsToContents()
        except Exception:
            QtWidgets.QMessageBox.about(self, ' ', 'Error')
示例#19
0
    def __init__(self, sendmessage, adderror, addserial):
        self.sendmessage = sendmessage  # function to create an Artisan message to the user in the message line
        self.adderror = adderror  # signal an error to the user
        self.addserial = addserial  # add to serial log

        # retries
        self.readRetries = 1
        #default initial settings. They are changed by settingsload() at initiation of program acording to the device chosen
        self.comport = "COM5"  #NOTE: this string should not be translated.
        self.baudrate = 115200
        self.bytesize = 8
        self.parity = 'N'
        self.stopbits = 1
        self.timeout = 1.0
        self.PID_slave_ID = 0
        self.PID_SV_register = 0
        self.PID_p_register = 0
        self.PID_i_register = 0
        self.PID_d_register = 0
        self.PID_ON_action = ""
        self.PID_OFF_action = ""
        self.input1slave = 0
        self.input1register = 0
        self.input1float = False
        self.input1bcd = False
        self.input1code = 3
        self.input1div = 0  # 0: none, 1: 1/10, 2:1/100
        self.input1mode = "C"
        self.input2slave = 0
        self.input2register = 0
        self.input2float = False
        self.input2bcd = False
        self.input2code = 3
        self.input2div = 0
        self.input2mode = "C"
        self.input3slave = 0
        self.input3register = 0
        self.input3float = False
        self.input3bcd = False
        self.input3code = 3
        self.input3div = 0
        self.input3mode = "C"
        self.input4slave = 0
        self.input4register = 0
        self.input4float = False
        self.input4bcd = False
        self.input4code = 3
        self.input4div = 0
        self.input4mode = "C"
        self.input5slave = 0
        self.input5register = 0
        self.input5float = False
        self.input5bcd = False
        self.input5code = 3
        self.input5div = 0
        self.input5mode = "C"
        self.input6slave = 0
        self.input6register = 0
        self.input6float = False
        self.input6bcd = False
        self.input6code = 3
        self.input6div = 0
        self.input6mode = "C"
        self.SVmultiplier = 0
        self.PIDmultiplier = 0
        self.byteorderLittle = False
        self.wordorderLittle = True
        self.master = None
        self.COMsemaphore = QSemaphore(1)
        self.host = '127.0.0.1'  # the TCP/UDP host
        self.port = 502  # the TCP/UDP port
        self.type = 0
        # type =
        #    0: Serial RTU
        #    1: Serial ASCII
        #    2: Serial Binary
        #    3: TCP
        #    4: UDP
        self.lastReadResult = 0  # this is set by eventaction following some custom button/slider Modbus actions with "read" command

        self.commError = False  # True after a communication error was detected and not yet cleared by receiving proper data
示例#20
0
# provided for educational purposes and is distributed in the hope that
# it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
# the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import shelve
from pathlib import Path

from PyQt5.QtCore import QSemaphore

from plus import config, util

register_semaphore = QSemaphore(1)

uuid_cache_path = util.getDirectory(config.uuid_cache)



# register the path for the given uuid, assuming it points to the .alog profile containing that uuid
def addPath(uuid,path):
    try:
        config.logger.debug("register:setPath(" + str(uuid) + "," + str(path) + ")")
        register_semaphore.acquire(1)
        with shelve.open(uuid_cache_path) as db:
            db[uuid] = path
    except Exception as e:
        config.logger.error("roast: Exception in addPath() %s",e)
    finally:
示例#21
0
class Window(QMainWindow):
    semaphore_start_reading = QSemaphore()
    input_sended = pyqtSignal()

    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.sem_for_timer = QSemaphore()

        self.reader_Thread = QThread()
        self.reader = ConsoleReader(self.sem_for_timer,
                                    self.semaphore_start_reading)
        self.reader.moveToThread(self.reader_Thread)

        # self.timerThread = QThread()
        # self.timer = Timer(self.sem_for_timer, self.reader_Thread)
        # self.timer.moveToThread(self.timerThread)

        self.writer_Thread = QThread()
        self.writer = ConsoleWriter(self.semaphore_start_reading)
        self.writer.moveToThread(self.writer_Thread)

        self.thr_read = Thread(target=self.ff)
        self.thr_write = Thread(target=self.ww)
        # self.thr_timer = Thread(target=self.gg)

        self.ui.startBt.clicked.connect(self.startProcess)
        # self.writer.process_created.connect(self.pp)
        # self.writer.process_created.connect(self.reader.set_pipe)
        self.ui.sendBt.clicked.connect(self.addInput)
        self.writer.value_entered.connect(self.semaphore_start_reading.release)
        self.reader.readed.connect(self.addToConsole)
        # self.timer.timeout.connect(self.newThread)

        self.writer_Thread.start()
        # self.timerThread.start()
        self.reader_Thread.start()

    # def newThread(self):
    #     self.reader_Thread = QThread()
    #     self.reader = ConsoleReader(self.sem_for_timer, self.semaphore_start_reading)
    #     self.reader.moveToThread(self.reader_Thread)
    #
    #     self.reader.set_pipe(self.writer.proc)
    #     self.reader.readed.connect(self.addToConsole)
    #     self.timer.set_readerThread(self.reader_Thread)
    #
    #     self.reader_Thread.start()
    #     print('new thread')
    #     self.semaphore_start_reading.release()
    #     self.thr_read.run()
    #     self.thr_timer.run()

    def addToConsole(self, output):
        self.ui.outputText.append(output)

    def startProcess(self):
        path = self.ui.comandLine.text()
        self.path = path.replace('\\', '/')
        # print(path)
        # self.writer.createProcess(path)
        self.thr_write.start()
        self.thr_read.start()
        # self.thr_timer.start()

    def addInput(self):
        print('x')
        input = self.ui.inputText.text()
        print('y')
        self.ui.outputText.append('>' + input)
        self.writer.write(input)

    def ff(self):
        # self.sem = QSemaphore()
        # self.timerThread = QThread()
        # self.timer = Timer(self.sem)
        # self.timer.moveToThread(self.timerThread)
        # # self.timer.timeout.connect(self.ii)

        # self.timerThread.start()

        # reader_Thread = QThread()
        # self.reader = ConsoleReader(self.semaphore)
        # self.reader.moveToThread(reader_Thread)
        #
        # self.reader.readed.connect(self.addToConsole)

        # reader_Thread.start()

        # self.semaphore.acquire()
        # self.reader.set_pipe(self.writer.proc)
        # self.timer.start()
        print('start read')
        self.reader.run()

    def ww(self):
        print('start process')
        print(self.path)
        self.writer.createProcess(self.path)
        self.reader.set_pipe(self.writer.proc)
__author__ = 'Administrator'
from PyQt5.QtCore import (QThread,pyqtSignal,QSemaphore,QUrl)
from PyQt5.QtNetwork import (QNetworkAccessManager,QNetworkRequest)
import requests
import xxtea
import time
import json
import random

mutex=QSemaphore(20)

class SearchThread(QThread):
    domain = 'kyfw.12306.cn' #请求域名(真实连接地址)
    host='kyfw.12306.cn' #请求的域名(host)
    http = requests.session()
    stopSignal=False
    threadId=1
    leftTicketUrl="leftTicket/query"
    requests.packages.urllib3.disable_warnings()

    searchThreadCallback= pyqtSignal(list)

    def __init__(self,from_station,to_station,train_date,threadId,leftTicketUrl,interval=2,domain=''):
        super(SearchThread,self).__init__()
        if domain!='':
            self.domain=domain

        self.threadId=threadId
        self.from_station=from_station
        self.to_station=to_station
        self.train_date=train_date
示例#23
0
文件: main.py 项目: aisyluG/LR2
class Window(QMainWindow):
    # семафор для работы потока
    sem = QSemaphore()

    sem_forBuffer = QSemaphore()
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # буфер для отправленных, но еще не обработанных сообщений
        self.buffer = queue.Queue()
        # потоки для обработки информации
        self.sentThread = QThread()
        self.sentObj = Producer(self.sem, self.buffer)
        self.sentObj.moveToThread(self.sentThread)

        self.n = 1
        self.getThreadsPool = [QThread()]
        self.getObjs = [Consumer(self.sem, self.sem_forBuffer, 1, self.buffer)]
        self.getObjs[0].moveToThread(self.getThreadsPool[0])



        self.ui.sendBt.clicked.connect(self.sentObj.run)
        self.ui.sendBt.clicked.connect(self.check)
        self.sentObj.message_sented.connect(self.getObjs[0].run)
        self.sentObj.message_sented.connect(self.addSendedMessage)
        self.getObjs[0].message_getted.connect(self.addGettedMessage)
        self.ui.okBt.clicked.connect(self.change_threadNumber)


        self.sem_forBuffer.release()
        self.sentThread.start()
        self.getThreadsPool[0].start()

    def check(self):
        print('check', self.sem_forBuffer.available())

    def change_threadNumber(self):
        n_new = self.ui.threadNumberSBox.value()
        if self.n < n_new:
            print(list(range(self.n, n_new)))
            for i in range(self.n, n_new):
                self.getThreadsPool.append(QThread())
                self.getObjs.append(Consumer(self.sem, self.sem_forBuffer, i+1, self.buffer))
                self.getObjs[i].moveToThread(self.getThreadsPool[i])
                self.sentObj.message_sented.connect(self.getObjs[i].run)
                self.getObjs[i].message_getted.connect(self.addGettedMessage)
                self.getThreadsPool[i].start()
        elif self.n > n_new:
            for i in range(n_new, self.n):
                self.getThreadsPool[i].terminate()
                self.getThreadsPool[i].wait()
            self.getThreadsPool = self.getThreadsPool[:n_new]
            self.getObjs = self.getObjs[:n_new]
        self.n = n_new


    def addSendedMessage(self, message):
        self.ui.sendedText.append(message)
        # print('1')

    def addGettedMessage(self, message):
        print('add', self.sem_forBuffer.available())
        self.sem_forBuffer.acquire(1)
        self.ui.gettedText.append(message)
        self.sem_forBuffer.release(1)
示例#24
0
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import shelve
import portalocker

from PyQt5.QtCore import QSemaphore

from plus import config, util


#### Account Cache

# holding all account ids associated to a (local) running number
# shared cache between the Artisan and the ArtisanViewer app

account_cache_semaphore = QSemaphore(1)

# shared resource between the Artisan and ArtisanViewer app protected by a file lock
account_cache_path = util.getDirectory(config.account_cache,share=True)
account_cache_lock_path = util.getDirectory(config.account_cache + "_lock",share=True)

# register the given account_id and assign it a fresh number if not yet registered
# returns the number associated to account_id or None on error
def setAccount(account_id):
    try:
        config.logger.debug("account:setAccount(" + str(account_id) + ")")
        account_cache_semaphore.acquire(1)
        with portalocker.Lock(account_cache_lock_path, timeout=1) as _:
            with shelve.open(account_cache_path) as db:
                if account_id in db:
                    return db[account_id]
示例#25
0
import platform

if platform.system().startswith("Windows") or platform.system() == 'Darwin':
    import keyring.backends.fail  # @UnusedImport
    import keyring.backends.OS_X  # @UnusedImport
    import keyring.backends.SecretService  # @UnusedImport
    import keyring.backends.Windows  # @UnusedImport
import keyring  # @Reimport # imported last to make py2app work

from plus import config, account, util
from artisanlib import __version__

from PyQt5.QtCore import QSemaphore

token_semaphore = QSemaphore(
    1)  # protects access to the session token which is manipluated only here


def getToken():
    try:
        token_semaphore.acquire(1)
        return config.token
    except:
        return None
    finally:
        if token_semaphore.available() < 1:
            token_semaphore.release(1)


def getNickname():
    try:
示例#26
0
# the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import json
import time

from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QSemaphore, QTimer

from artisanlib.util import d as decode, encodeLocal

from plus import config, connection, util, controller

stock_semaphore = QSemaphore(
    1)  # protects access to the stock_cache file and the stock dict

stock_cache_path = util.getDirectory(config.stock_cache)

stock = None  # holds the dict with the current stock data (coffees, blends,..)

###################
# stock cache update
#

# updates the stock cache


def update():
    QTimer.singleShot(2, lambda: update_blocking())
示例#27
0
import shelve
import portalocker
import requests

from PyQt5.QtCore import QSemaphore, QTimer
from PyQt5.QtWidgets import QApplication

from plus import config, util, connection, controller, roast

#### Sync Cache

# holding all roast UUIDs under sync with the server
# shared cache between the Artisan and the ArtisanViewer app

sync_cache_semaphore = QSemaphore(1)


# if lock is True, return the path of the corresponding lock file
def getSyncPath(lock=False):
    if config.account_nr is None or config.account_nr == 0:
        fn = config.sync_cache
    else:
        fn = config.sync_cache + str(config.account_nr)
    if lock:
        fn = fn + "_lock"
    return util.getDirectory(fn, share=True)


# register the modified_at timestamp (EPOC as float with milliseoncds) for the given uuid, assuming it holds the last timepoint modifications were last synced with the server
def addSync(uuid, modified_at):
示例#28
0
    try:
        import keyring.backends.macOS  # @UnusedImport @UnresolvedImport
        keyring.set_keyring(keyring.backends.macOS.Keyring())
    except:
        import keyring.backends.OS_X  # @UnusedImport @UnresolvedImport
        keyring.set_keyring(keyring.backends.OS_X.Keyring())
    import keyring.backends.SecretService  # @UnusedImport
    import keyring.backends.Windows  # @UnusedImport
import keyring  # @Reimport # imported last to make py2app work

from PyQt5.QtWidgets import QApplication, QMessageBox
from PyQt5.QtCore import QSemaphore, QTimer, Qt

from plus import config, connection, stock, queue, sync, roast, util

connect_semaphore = QSemaphore(1)


def is_connected():
    try:
        connect_semaphore.acquire(1)
        return config.connected
    finally:
        if connect_semaphore.available() < 1:
            connect_semaphore.release(1)


# artisan.plus is on as soon as an account id has been established
# Note that artisan.plus might be on, while not being connected due to connectivity issues
def is_on():
    aw = config.app_window
示例#29
0
## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
## $QT_END_LICENSE$
##
#############################################################################

import sys
import random

from PyQt5.QtCore import QCoreApplication, QSemaphore, QThread

DataSize = 100000
BufferSize = 8192
buffer = list(range(BufferSize))

freeBytes = QSemaphore(BufferSize)
usedBytes = QSemaphore()


class Producer(QThread):
    def run(self):
        for i in range(DataSize):
            freeBytes.acquire()
            buffer[i % BufferSize] = "ACGT"[random.randint(0, 3)]
            usedBytes.release()


class Consumer(QThread):
    def run(self):
        for i in range(DataSize):
            usedBytes.acquire()
示例#30
0
    def run_process_conformity(self, progress_bar, params=None):
        results = []
        nc = cpu_count() - 1
        sem = QSemaphore(nc)
        bar_sem = QSemaphore(1)
        qDebug("CPU count " + str(nc + 1))
        parameters = params
        self.attached_progess_bar = progress_bar

        th_list = []
        n = len(self.case_event_model.cases)
        progress_bar.setMaximum(n)
        qDebug("Process Conformity -- Run")
        for (case, eventSeq) in self.case_event_model.cases.items():
            dummyCase = (case, eventSeq)
            #qDebug("Start -- Case %s" % str(case))
            th = ReplayThread(self.process_model, dummyCase, progress_bar,
                              bar_sem, results, sem, parameters)
            th.updateProgessbarSignal.connect(self.update_progress_bar_slot)
            th_list.append((th, case))
            th.start()
            sem.acquire()

        qDebug("All threads Created")

        for (th, case) in th_list:
            if th and th.isFinished():
                pass
            else:
                sem.acquire()
            th.updateProgessbarSignal.disconnect(self.update_progress_bar_slot)

        n = 0
        nCase = CaseAttributeModel(name="Conformity Process Result")
        i_itens = []
        legend = ["ID"]
        if bool(parameters["conformity"]):
            legend.append(["Conformity"])
        if bool(parameters["types"]):
            legend.append(["NonConformity Type"])
        if parameters["notes"] == "add":
            legend.append(["Notes"])

        for i in range(len(legend)):
            i_itens.append(i)
        nCase.add_legend(legend)

        string = "Params:"
        for key, value in parameters.items():
            string += "\t" + str(key) + " : " + str(value) + "\n"

        string += "==============Report===========\n"
        for item in results:
            liste = []
            string += str(item[0]) + " : "
            if parameters["conformity"]:
                liste.append(item[1])
                string += str(item[1]) + "\t"
            if parameters["types"]:
                if parameters["style"] == "int":
                    liste.append(item[2])
                    string += str(item[2]) + "\t"
                else:
                    if item[2] == 0:
                        liste.append("Conform")
                        string += format("%110s" % "Conform")
                    elif item[2] == 1:
                        liste.append("Non Conform: Inexistent Activity")
                        string += format("%110s" %
                                         "Non Conform: Inexistent Activity")
                    elif item[2] == 2:
                        liste.append("Non Conform: Inexistent Transition")
                        string += format("%110s" %
                                         "Non Conform: Inexistent Transition")
                    elif item[2] == 3:
                        liste.append(
                            "Non Conform: Inexistent Activity and Inexistent Transition"
                        )
                        string += format(
                            "%110s" %
                            "Non Conform: Inexistent Activity and Inexistent Transition"
                        )
                    elif item[2] == 4:
                        liste.append(
                            "Non Conform: Transition with Innapropriate Duration"
                        )
                        string += format(
                            "%110s" %
                            "Non Conform: Transition with Innapropriate Duration"
                        )
                    elif item[2] == 5:
                        liste.append(
                            "Non Conform: Transition with Innapropriate Duration and Inexistent Activity"
                        )
                        string += format(
                            "%110s" %
                            "Non Conform: Transition with Innapropriate Duration and Inexistent Activity"
                        )
                    elif item[2] == 6:
                        liste.append(
                            "Non Conform: Transition with Innapropriate Duration and Inexistent Transition"
                        )
                        string += format(
                            "%110s" %
                            "Non Conform: Transition with Innapropriate Duration and Inexistent Transition"
                        )
                    elif item[2] == 7:
                        liste.append(
                            "Non Conform: Transition with Innapropriate Duration, Inexistent Activity and Inexistent Transition"
                        )
                        string += format(
                            "%110s" %
                            "Non Conform: Transition with Innapropriate Duration, Inexistent Activity and Inexistent Transition"
                        )

            if parameters["notes"] == "add":
                liste.append(str(item[3]))
            if parameters["notes"] != "ignore":
                string += str(item[3]) + "\t"
            nCase.add_case(item[0], liste)
            string += "\n"

        if parameters["result_group"] == "merge":
            self.case_attribute_model[0].merge(nCase, i_itens)

        self.attached_progess_bar.setValue(0)
        self.attached_progess_bar = None

        self.signal_project_has_changed.emit()
        self.signal_conformity_algorithm_finished.emit(string)