重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

python函数监听 python监听网络请求

如何实现python 条件执行函数,指定时间未执行过则自动执行一次

写一个类. 类里留个变量(fun2_tiime)记录函数2执行的时间戳.

创新互联公司专注于企业全网营销推广、网站重做改版、娄烦网站定制设计、自适应品牌网站建设、H5页面制作成都商城网站开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为娄烦等各大城市提供网站开发制作服务。

类里写个无限循环的函数, 不断比较 变量(fun2_tiime)当前时间差值, 如果差值大于20就执行函数2.

Python中什么是事件

# encoding: UTF-8

# 系统模块

from Queue import Queue, Empty

from threading import *

########################################################################

class EventManager:

#----------------------------------------------------------------------

def __init__(self):

"""初始化事件管理器"""

# 事件对象列表

self.__eventQueue = Queue()

# 事件管理器开关

self.__active = False

# 事件处理线程

self.__thread = Thread(target = self.__Run)

# 这里的__handlers是一个字典,用来保存对应的事件的响应函数

# 其中每个键对应的值是一个列表,列表中保存了对该事件监听的响应函数,一对多

self.__handlers = {}

#----------------------------------------------------------------------

def __Run(self):

"""引擎运行"""

while self.__active == True:

try:

# 获取事件的阻塞时间设为1秒

event = self.__eventQueue.get(block = True, timeout = 1)  

self.__EventProcess(event)

except Empty:

pass

#----------------------------------------------------------------------

def __EventProcess(self, event):

"""处理事件"""

# 检查是否存在对该事件进行监听的处理函数

if event.type_ in self.__handlers:

# 若存在,则按顺序将事件传递给处理函数执行

for handler in self.__handlers[event.type_]:

handler(event)

#----------------------------------------------------------------------

def Start(self):

"""启动"""

# 将事件管理器设为启动

self.__active = True

# 启动事件处理线程

self.__thread.start()

#----------------------------------------------------------------------

def Stop(self):

"""停止"""

# 将事件管理器设为停止

self.__active = False

# 等待事件处理线程退出

self.__thread.join()

#----------------------------------------------------------------------

def AddEventListener(self, type_, handler):

"""绑定事件和监听器处理函数"""

# 尝试获取该事件类型对应的处理函数列表,若无则创建

try:

handlerList = self.__handlers[type_]

except KeyError:

handlerList = []

self.__handlers[type_] = handlerList

# 若要注册的处理器不在该事件的处理器列表中,则注册该事件

if handler not in handlerList:

handlerList.append(handler)

#----------------------------------------------------------------------

def RemoveEventListener(self, type_, handler):

"""移除监听器的处理函数"""

#读者自己试着实现

#----------------------------------------------------------------------

def SendEvent(self, event):

"""发送事件,向事件队列中存入事件"""

self.__eventQueue.put(event)

########################################################################

"""事件对象"""

class Event:

def __init__(self, type_=None):

self.type_ = type_      # 事件类型

self.dict = {}          # 字典用于保存具体的事件数据

测试代码

# encoding: UTF-8

import sys

from datetime import datetime

from threading import *

from EventManager import *

#事件名称  新文章

EVENT_ARTICAL = "Event_Artical"

#事件源 公众号

class PublicAccounts:

def __init__(self,eventManager):

self.__eventManager = eventManager

def WriteNewArtical(self):

#事件对象,写了新文章

event = Event(type_=EVENT_ARTICAL)

event.dict["artical"] = u'如何写出更优雅的代码\n'

#发送事件

self.__eventManager.SendEvent(event)

print u'公众号发送新文章\n'

#监听器 订阅者

class Listener:

def __init__(self,username):

self.__username = username

#监听器的处理函数 读文章

def ReadArtical(self,event):

print(u'%s 收到新文章' % self.__username)

print(u'正在阅读新文章内容:%s'  % event.dict["artical"])

"""测试函数"""

#--------------------------------------------------------------------

def test():

listner1 = Listener("thinkroom") #订阅者1

listner2 = Listener("steve")#订阅者2

eventManager = EventManager()

#绑定事件和监听器响应函数(新文章)

eventManager.AddEventListener(EVENT_ARTICAL, listner1.ReadArtical)

eventManager.AddEventListener(EVENT_ARTICAL, listner2.ReadArtical)

eventManager.Start()

publicAcc = PublicAccounts(eventManager)

timer = Timer(2, publicAcc.WriteNewArtical)

timer.start()

if __name__ == '__main__':

test()

python给一个事件绑定多个函数

应该是给一个标签绑定多个事件监听函数吧?

addEventListener 可以重复绑定多个

不会有冲突 按照绑定先后的顺序去执行多个函数。

如何用python写监控日志函数

def write_log(username,operation):

'''

写日志函数

:param username:用户名

:param operation:用户的操作信息

:return:

'''

w_time = time.strftime('%Y-%m-%d %H%M%S')

with open('log.txt','a+') as fw:

log_content = '%s %s %s \n'%(w_time,username,operation)

fw.write(log_content)

希望对你有帮助!

python gevent 每个socket 的消息接收是否有使用事件监听回调的方法

gevent 比起其他框架(比如tornado,twisted)的一个巨大优势就是:用同步的方法(自然没有回调函数)写异步应用,因为同步的方式更接近开发人员的编程思维。

gevent可以用一句话向pythoner阐述:使用多路IO复用对文件描述符的事件监听,从而撬动协程的“透明”切换。这句话说起来容易,但是阐述起来就复杂些:

底层(或者说主协程)自然有一个多路IO复用循环(linux上是epoll,unix是kqueue,以下统一用epoll代替描述)

当处理一个socket链接时,就创建一个协程greenlet去处理。

当socket遇到阻塞的时候,比如等待数据的返回或者发送,此时gevent做了很关键的两步:

为这个socket的fd在epoll上添加可读或者可写事件回调,而这个回调函数便是 gevent.getcurrent().switch

通过 get_hub().switch() 切换到主协程。切换回主协程,去干其他事情了。但是当该socket可读或者可写,epoll自然会调用上述添加的回调函数,从而切换回socket的处理协程,从上次悬挂点接着往下执行。

之所以做到透明,是因为python socket上打了patch。所谓打patch,就是自己实现了一个socket模块替换了python的标准socket模块。


分享名称:python函数监听 python监听网络请求
标题来源:http://cqcxhl.com/article/hgdecg.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP