当前位置: 首页 > 后端技术 > Python

排气

时间:2023-03-25 20:50:19 Python

#gevent/greenlet.pyclassGreenlet(greenlet):def__init__(self,run=None,*args,**kwargs):_greenlet__init__(self,None,get_hub())#将hup指定为父级self._run=run#Greenlet.switch将调用运行函数@classmethoddefspawn(cls,*args,**kwargs):g=cls(*args,**kwargs)g.start()returngdefstart(self):ifself._start_eventisNone:self._start_event=self.parent.loop.run_callback(self.switch)#registerswtichtoloopdefrun(self):self._run(*self.args,**self.kwargs)#gevent/hup.pyclassHub(WaitOperationsGreenlet):defrun(self):#Hup.switch将调用运行函数while1:try:self.loop.run()#Eventlooprunfinally:loop.error_handler=None#breaktherefcountcycleimportgeventdeftest1():print('进入测试1')gevent.sleep(0)print('切换测试1')deftest2():print('进入测试2')gevent.sleep(0)print('切换测试2')gevent.joinall([gevent.spawn(test1),gevent.spawn(test2),])进入test1进入test2切换test1切换test2gevent/monkey.py@_ignores_DoNotPatchdefpatch_socket(dns=True,aggressive=True):ifdns:items=socket.__implements__else:items=set(socket.__implements__)-set(socket.__dns__)_patch_module('socket',items=items)#patchedsocketgevent/_socket2.pyclass套接字(object):def__init__(self,family=AF_INET,type=SOCK_STREAM,proto=0,_sock=None):self._sock.setblocking(0)#设置非阻塞的socketfileno=self._sock.fileno()self.hub=get_hub()io=self.hub.loop.ioself._read_event=io(fileno,1)self._write_event=io(fileno,2)#gevent/monkey.pydefpatch_all(socket=True,dns=True,time=True,select=True,thread=True,os=True,ssl=True,httplib=False,#已弃用,将被移除。subprocess=True,sys=False,aggressive=True,Event=True,builtins=True,signal=True,queue=True,**kwargs):#顺序很重要如果os:patch_os()如果时间:patch_time()如果线程:patch_thread(Event=Event,_warnings=_warnings)如果sys:patch_sys()如果套接字:patch_socket(dns=dns,aggressive=aggressive)如果选择:patch_select(aggressive)=aggressive)ifssl:patch_ssl(_warnings=_warnings,_first_time=first_time)ifhttplib:raiseValueError('gevent.httplibisnolongerprovided,httplibmustbeFalse')ifsubprocess:patch_subprocess()ifbuiltins:patch_builtins()ifsignal:patch_signal()ifqueue:patch_queue()#gevent/monkey.py@_ignores_DoNotPatchdefpatch_time():_patch_module('time')#使用gevent.time模块#gevent/time.pyfromgevent.hubimportsleepsleep=sleep#geventsleep阻塞当前协程