import asyncio import os import selectors selector = selectors.SelectSelector() loop = asyncio.SelectorEventLoop(selector) asyncio.set_event_loop(loop) os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = '1' os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
def _sendfile_use_sendfile(self, file, offset=0, count=None): self._check_sendfile_params(file, offset, count) sockno = self.fileno() try: fileno = file.fileno() except (AttributeError, io.UnsupportedOperation) as err: raise _GiveupOnSendfile(err) # not a regular file try: fsize = os.fstat(fileno).st_size except OSError as err: raise _GiveupOnSendfile(err) # not a regular file if not fsize: return 0 # empty file blocksize = fsize if not count else count timeout = self.gettimeout() if timeout == 0: raise ValueError("non-blocking sockets are not supported") # poll/select have the advantage of not requiring any # extra file descriptor, contrarily to epoll/kqueue # (also, they require a single syscall). if hasattr(selectors, 'PollSelector'): selector = selectors.PollSelector() else: selector = selectors.SelectSelector() selector.register(sockno, selectors.EVENT_WRITE) total_sent = 0 # localize variable access to minimize overhead selector_select = selector.select os_sendfile = os.sendfile try: while True: if timeout and not selector_select(timeout): raise _socket.timeout('timed out') if count: blocksize = count - total_sent if blocksize <= 0: break try: sent = os_sendfile(sockno, fileno, offset, blocksize) except BlockingIOError: if not timeout: # Block until the socket is ready to send some # data; avoids hogging CPU resources. selector_select() continue except OSError as err: if total_sent == 0: # We can get here for different reasons, the main # one being 'file' is not a regular mmap(2)-like # file, in which case we'll fall back on using # plain send(). raise _GiveupOnSendfile(err) raise err from None else: if sent == 0: break # EOF offset += sent total_sent += sent return total_sent finally: if total_sent > 0 and hasattr(file, 'seek'): file.seek(offset)
from multiprocessing import freeze_support from prompt_toolkit import PromptSession, HTML from prompt_toolkit.completion import WordCompleter, NestedCompleter from distutils.version import StrictVersion from CB import HEADERS, HEADLESS_TERMINAL_THEME, __version__ from CB.Core import Core from CB.Compat import pause, timeout, clear, set_terminal_title, set_terminal_size, getch, kbhit from CB.Wago import WagoUpdater if platform.system() == 'Windows': from ctypes import windll, wintypes # FIXME - Python bug #39010 - Fixed in 3.8.6/3.9 import asyncio import selectors asyncio.set_event_loop(asyncio.SelectorEventLoop(selectors.SelectSelector())) class TUI: def __init__(self): self.core = Core() self.session = PromptSession(reserve_space_for_menu=6, complete_in_thread=True) self.headless = False self.console = None self.table = None self.cfSlugs = None self.wowiSlugs = None self.completer = None self.os = platform.system() install()
def create_event_loop(self): return asyncio.SelectorEventLoop(selectors.SelectSelector())
def _sendfile_use_sendfile(self, file, offset=0, count=None): self._check_sendfile_params(file, offset, count) sockno = self.fileno() try: fileno = file.fileno() except (AttributeError, io.UnsupportedOperation) as err: try: raise _GiveupOnSendfile(err) finally: err = None del err try: fsize = os.fstat(fileno).st_size except OSError as err: try: raise _GiveupOnSendfile(err) finally: err = None del err if not fsize: return 0 blocksize = fsize if not count else count timeout = self.gettimeout() if timeout == 0: raise ValueError('non-blocking sockets are not supported') if hasattr(selectors, 'PollSelector'): selector = selectors.PollSelector() else: selector = selectors.SelectSelector() selector.register(sockno, selectors.EVENT_WRITE) total_sent = 0 selector_select = selector.select os_sendfile = os.sendfile try: while 1: if timeout: pass if not selector_select(timeout): raise _socket.timeout('timed out') if count: blocksize = count - total_sent if blocksize <= 0: break try: sent = os_sendfile(sockno, fileno, offset, blocksize) except BlockingIOError: if not timeout: selector_select() continue except OSError as err: try: if total_sent == 0: raise _GiveupOnSendfile(err) raise err from None finally: err = None del err else: if sent == 0: break offset += sent total_sent += sent return total_sent finally: if total_sent > 0: pass if hasattr(file, 'seek'): file.seek(offset)
ARGS = argparse.ArgumentParser( description="websocket console client for wssrv.py example.") ARGS.add_argument('--host', action="store", dest='host', default='127.0.0.1', help='Host name') ARGS.add_argument('--port', action="store", dest='port', default=8080, type=int, help='Port number') if __name__ == '__main__': args = ARGS.parse_args() if ':' in args.host: args.host, port = args.host.split(':', 1) args.port = int(port) url = 'http://{}:{}'.format(args.host, args.port) loop = asyncio.SelectorEventLoop(selectors.SelectSelector()) asyncio.set_event_loop(loop) loop.add_signal_handler(signal.SIGINT, loop.stop) asyncio.Task(start_client(loop, url)) loop.run_forever()
import socket import selectors import time Socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) Socket.bind(('127.0.0.1', 8000)) print('Binding socket at : 127.0.0.1:8000') Socket.listen(5) print('Start Listening...') _exit = False with selectors.SelectSelector() as selector: selector.register(Socket, selectors.EVENT_READ) while not _exit: ready = selector.select(0.5) if ready: request, client_address = Socket.accept() data = request.recv(1024).decode('utf-8') print(data) request.send(('[%s]Received : %s' % (time.ctime(), data)).encode())
def run(self): global threadloops if self.name == "CPU": # CPU Thread global CPU while threadloops: try: if not sensor.cfg["CPU"][ "enabled"]: # Wenn der Sensor abgeschaltet ist wird der Thread beended CPU = {"cpu": {"enabled": False}} break CPU = sensor.get_cpu( ) # Setzt die aktuellen werte in die liste i = 0 for cpu in CPU["cpu"]["use"]: i += cpu last = i / len(CPU["cpu"]["use"]) sensor.check_for_log("CPU", round( last, 2)) # überprüft ob die CPU insgesammt über einen der # Alert werte liegt except: if sensor.cfg is None: # wenn die Config nicht richtig geladen ist muss sie gesetzt werden sensor.cfg = sensor.read_config(sensor.config()) time.sleep( sleep - 1 ) # Die CPU braucht 1 Sekunde um die Last zu messen deswegen wird -1 gerechnet elif self.name == "MEM": # RAM Thread global MEM while threadloops: try: if not sensor.cfg["MEM"][ "enabled"]: # Wenn der Sensor abgeschaltet ist wird der Thread beended MEM = {"mem": {"enabled": False}} break MEM = sensor.get_memory( ) # Setzt die aktuellen werte in die liste sensor.check_for_log("MEM", round( MEM["mem"]["used"], 2)) # überprüft ob die auslastung über einen # der Alert werte liegt except: if sensor.cfg is None: sensor.cfg = sensor.read_config(sensor.config()) time.sleep(sleep) elif self.name == "DISK": # Disk Thread global DISK while threadloops: try: DISK = sensor.get_all_drives( ) # Setzt die aktuellen werte in die liste for d in DISK["speicher"]: sensor.check_for_log( d, round(float(DISK["speicher"][d]["used"][2]), 2)) # überprüft ob die # auslastung über einen der Alert werte liegt except: if sensor.cfg is None: sensor.cfg = sensor.read_config(sensor.config()) time.sleep(sleep) elif self.name == "SEND": # Websocket Client Thread ( siehe def send() ) global clientloop time.sleep(3) while threadloops: try: ### Bugfix für windows 3.8 eventloop in thread selector = selectors.SelectSelector() clientloop = asyncio.SelectorEventLoop(selector) asyncio.set_event_loop(clientloop) ### asyncio.get_event_loop().run_until_complete( send(self)) # Startet den Websocket Client except Exception as e: if not "code = 1006" in str(e): sensor.log_event( "WEBSOCKET Client", 9, "Client Killed " + str(e) ) # Schreibt eventuelle errors in die logdatei time.sleep(1) elif self.name == "WEBSOCK": # Websocket Server Thread global serverloop time.sleep(1) while threadloops: try: ### Bugfix für windows 3.8 eventloop in thread selector = selectors.SelectSelector() serverloop = asyncio.SelectorEventLoop(selector) asyncio.set_event_loop(serverloop) ### # schreibt die websocket Server adresse in den Log sensor.log_event( "WEBSOCKET", 9, 'ws://' + sensor.cfg["ws"]["ip"] + ":" + str(sensor.cfg["ws"]["port"])) start_server = websockets.serve(wbs, sensor.cfg["ws"]["ip"], sensor.cfg["ws"]["port"]) asyncio.get_event_loop().run_until_complete( start_server) # Startet den Websocket Server asyncio.get_event_loop().run_forever() except Exception as e: sensor.log_event( "WEBSOCKET", 9, "Server Killed " + str(e)) # Schreibt eventuelle errors in die logdatei if "Errno 10048" in str(e) or "Errno 98" in str( e) or "already in use" in str( e ): ### Error wenn das Tool Zweimal gestartet wird threadloops = False serverloop.stop() clientloop.stop() time.sleep(3) clear() print("Websocket already in use\n\n" + str(e)) input("\nPress Enter to Close") sys.exit(0) time.sleep(1)
DISK = sensor.get_all_drives( ) # Disk List z.B. {"speicher": {"C:\\": {"total": ["475.50", "GB", "100.0"], "used": [ # "409.64", "GB", "86.1"], "free": ["65.86", "GB", "13.9"], "enabled": true, "warning": 85, "critical": 95}, # "D:\\": {"total": ["232.89", "GB", "100.0"], "used": ["116.42", "GB", "50.0"], "free": ["116.47", "GB", "50.0"], # "enabled": true, "warning": 85, "critical": 95}, "E:\\": {"enabled": false, "warning": 85, "critical": 95}, # "F:\\": {"total": ["232.85", "GB", "100.0"], "used": ["148.97", "MB", "0.1"], "free": ["232.70", "GB", "99.9"], # "enabled": true, "warning": 85, "critical": 95}}} ### TIP: benutze https://www.jsonformatter.io/ um diesen Json Dump leichter zu lesen # loops für die Websockets ## inklusive workaround für windows python 3.8 policy = asyncio.get_event_loop_policy() policy._loop_factory = asyncio.SelectorEventLoop selector = selectors.SelectSelector() clientloop = asyncio.SelectorEventLoop(selector) selector2 = selectors.SelectSelector() serverloop = asyncio.SelectorEventLoop(selector2) def clear(): # Löscht den Inhalt des Terminals system('cls' if name == 'nt' else 'clear') def state_event(): # Gibt eine liste aus allen listen im Json format zurück return json.dumps({ **DISK, **CPU, **MEM, "sleep": sleep,
elif (var355.type == aiohttp.WSMsgType.CLOSED): pass break yield from function2515() var3322 = argparse.ArgumentParser( description='websocket console client for wssrv.py example.') var3322.add_argument('--host', action='store', dest='host', default='127.0.0.1', help='Host name') var3322.add_argument('--port', action='store', dest='port', default=8080, type=int, help='Port number') if (__name__ == '__main__'): var2601 = var3322.parse_args() if (':' in var2601.host): (var2601.host, var461) = var2601.host.split(':', 1) var2601.port = int(var461) var2042 = 'http://{}:{}'.format(var2601.host, var2601.var461) var3984 = asyncio.SelectorEventLoop(selectors.SelectSelector()) asyncio.set_event_loop(var3984) var3984.add_signal_handler(signal.SIGINT, var3984.stop) asyncio.Task(function2101(var3984, var2042)) var3984.run_forever()
import time import aiohttp URL = 'https://www.xiazaiba.com' async def job(session): response = await session.get(URL) return str(response.url) async def main(_loop): async with aiohttp.ClientSession() as session: tasks = [_loop.create_task(job(session)) for _ in range(5)] finished, unfinished = await asyncio.wait(tasks) all_results = [r.result() for r in finished] # 得到工作回报. print(all_results) if __name__ == '__main__': t2 = time.time() # loop = asyncio.get_event_loop() # Removed selector = selectors.SelectSelector() # New line loop = asyncio.SelectorEventLoop(selector) # New line try: loop.run_until_complete(main(loop)) # 完成事件循环,直到最后一个任务结束 finally: loop.close() # 结束事件循环. print("Async total time:", time.time() - t2)