def _produzir(self): while True: if win32event.WaitForSingleObject( self.mutex, 1) == 0: # Permite que apenas um produtor produza por vez if win32event.WaitForSingleObject( self.cheio, 1 ) == 0: # Verifica se o semáforo não está cheio para poder produzir aux1 = self.armazem.read().decode() aux2 = '' for i in aux1: if not i == '\x00': aux2 += i aux2 = int(aux2) aux2 += 1 while (self.armazem.tell() < self.limite_producao): self.armazem.write_byte(0) self.armazem.seek(0) self.armazem.write(str(aux2).encode()) self.armazem.seek(0) if aux2 == self.limite_producao: try: win32event.ReleaseSemaphore( self.vazio, 1 ) # Libera o semáforo, informando que o armazém não está vazio except: pass win32event.ReleaseSemaphore(self.mutex, 1) # Libera o mutex else: win32event.ReleaseSemaphore( self.cheio, 1 ) # Libera o semáforo, informando que o armazém não está cheio try: win32event.ReleaseSemaphore( self.vazio, 1 ) # Libera o semáforo, informando que o armazém não está vazio except: pass win32event.ReleaseSemaphore(self.mutex, 1) # Libera o mutex aux3 = '' for _ in range(aux2): aux3 += '| X ' print("PID {} informa: produzindo... {}| Total: {}". format(str(os.getpid()), aux3, str(aux2))) self._sleep() else: print('PID {} informa: Armazém cheio...'.format( str(os.getpid()))) win32event.ReleaseSemaphore(self.mutex, 1) # Libera o mutex self._sleep() else: self._sleep()
def Command(code, dict): py.eeger.CMD = code py.eeger.CMDRESP = 0 py.interface = dict logger('in command %d' % code) #print dict while 1: win32event.ReleaseSemaphore(py.sema1, 1) # let command processor run logger('Released sema1') while 1: if code == PYRun or code == PYReplay: time.sleep(1.0) else: time.sleep(0.1) if py.eeger.CMDRESP: break # if win32event.WaitForSingleObject(py.sema,win32event.INFINITE) # if py.eeger.DICTQ != 0: # handle_dictq() # else: logger('outa command %d' % py.eeger.CMDRESP) return py.eeger.CMDRESP
def windows_release_semaphore(sem): win32event.ReleaseSemaphore(sem, 1)
def dictcb(self): win32event.WaitForSingleObject(self.sema2, win32event.INFINITE) self.queries += 1 qthread(1, 2) win32event.ReleaseSemaphore(self.sema2, 1)