python异步回调函数的实现
#coding:utf-8
from socket import *
import time #简单的服务器程序 监听用户连接,接收用户发来的信息,并返回反馈
def main():
HOST = ""
PORT = 3316
BUFSIZE = 1024
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
print "YoSQL bind port %d ,starting ...." % PORT
while 1:
print 'waiting for connection ...'
tcpCliSock, addr = tcpSerSock.accept()
print '...connected from:',addr while 1:
try:
data = tcpCliSock.recv(BUFSIZE)
if not data:
break
print 'data = %s' % data
i = data.find('[')
j = data.find(']')
if i!=-1 and j!=-1:
sFuncId = data[i+1:j]
message = data[j+1:]
time.sleep(2)
SendToListener("[%s] echo" % sFuncId)
except Exception, e:
print e
break
tcpCliSock.close()
tcpSerSock.close() def SendToListener(message):
listenerSock = socket(AF_INET, SOCK_STREAM)
listenerSock.connect(('localhost',7800))
listenerSock.send(message)
listenerSock.close()
print 'send to listener: %s' % message if __name__ == '__main__':
main()
#http://blog.csdn.net/payinglee/article/details/9005010
#coding:utf-8
import threading
import time
from socket import * lCallback = {}
iFuncId = 0 #首先注册函数,当接收到来自YoSQL的信息后,再调用该函数
#callback机制:为某一事件注册回调函数,当事件发生时,调用该函数
def StartListener():
global iFuncId
global lCallback
HOST = ""
PORT = 7800
BUFSIZE = 1024
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
print "Listener bind port %d ,starting ...." % PORT
while 1:
print 'waiting for connection ...'
tcpCliSock, addr = tcpSerSock.accept()
print '...connected from:',addr
while 1:
try:
data = tcpCliSock.recv(BUFSIZE)
if not data:
break
print 'data = %s' % data
i = data.find('[')
j = data.find(']')
if i!=-1 and j!=-1:
iFuncId = int(data[i+1:j])
message = data[j+1:]
func = lCallback.get(iFuncId,None)
if func:
func()
del lCallback[iFuncId]
except Exception,e:
print e
break
tcpCliSock.close()
tcpSerSock.close() def MyCallback():
print 'callback called !!!!!!!!!!' def Send(callback,message):
global iFuncId
global lCallback
lCallback[iFuncId] = callback
listenerSock = socket(AF_INET, SOCK_STREAM)
listenerSock.connect(('localhost',3316))
listenerSock.send("[%d] %s" % (iFuncId,message))
listenerSock.close()
iFuncId += 1
print 'send message to YoSQL : %s'%message def DoSomeThing():
print '......DoSomeThing......'
if __name__ == '__main__':
t = threading.Thread(target=StartListener)
t.setDaemon(True)
t.start()
# t.join()
DoSomeThing()
DoSomeThing()
Send(MyCallback,"hahaha")
i = 0
while i < 20:
i+= 1
DoSomeThing()
try:
time.sleep(0.5)
except Exception,e:
print e
break
# t.join(2)
print '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'
python异步回调函数的实现的更多相关文章
- Python并发编程06 /阻塞、异步调用/同步调用、异步回调函数、线程queue、事件event、协程
Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 目录 Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件 ...
- 跨平台python异步回调机制实现和使用方法
跨平台python异步回调机制实现和使用方法 这篇文章主要介绍了python异步回调机制的实现方法,提供了使用方法代码 1 将下面代码拷贝到一个文件,命名为asyncore.py 代码如下: impo ...
- ArcGIS中使用异步回调函数查询图层Graphic
在我们的地图的操作中经常会有一些操作是需要通过画多边形或者画线来查找某一块区域内的特定的Graphics比如我们在做的交警的项目中通过框选来查找某一块区域中的摄像机,某一块区域中的警力.警情.警员等相 ...
- python 管道 事件(Event) 信号量 进程池(map/同步/异步)回调函数
####################总结######################## 管道:是进程间通信的第二种方式,但是不推荐使用,因为管道会导致数据不安全的情况出现 事件:当我运行主进程的 ...
- python异步回调顺序?是否加锁?
话不多说,直接上代码: import time from functools import partial from concurrent.futures.process import Process ...
- WPF如何获得变量异步回调函数时产生的异步回调
有这样的问题,WPF当使用异步回调,需要使用产生的异步变量中的回调函数.数据库中查询诸如异步函数来获得一DataTable.怎样传递给回调函数呢? [方案一]使用全局变量 非常easy想到的是用全局变 ...
- python 自定义回调函数
回调函数用起来比较爽.特别是在js中,满世界全是回调,那么在python中,怎么来优雅地实现自己的回调函数呢 下面贴一个我写的例子 class BaseHandler(object): def cra ...
- 前端笔记之JavaScript(九)定时器&JSON&同步异步/回调函数&函数节流&call/apply
一.快捷位置和尺寸属性 DOM已经提供给我们计算后的样式,但是还是觉得不方便,因为计算后的样式属性值都是字符串类型. 不能直接参与运算. 所以DOM又提供了一些API:得到的就是number类型的数据 ...
- 对于Python中回调函数的理解
关于回调函数,网上有很多说明和各种解释,多数在尝试用语言描述.我认为,如果对各个角色之间的关系不清楚,如果没有相关的编程需求,那么语言便非常无力,很难理解. 这是360百科的解释: 在计算机程序设计中 ...
随机推荐
- 调试SQL Server的存储过程及用户定义函数
分类: 数据库管理 2005-06-03 13:57 9837人阅读 评论(5) 收藏 举报 sql server存储vb.net服务器sql语言 1.在查询分析器中调试 查询分析器中调试的步骤如下: ...
- Node.js——express
res.send(),比原生的 res.end() 强大,原生只支持字符串和Buffer对象,而且需要自己加响应报文头,send支持字符串.Buffer.Json对象.数组,而且自动加响应报文头 ap ...
- (转)淘淘商城系列——SSM框架整合之Service层整合
http://blog.csdn.net/yerenyuan_pku/article/details/72721108 上文我们一起学习了Dao层的整合,本文将教大家如何整合Service层. 我们需 ...
- Jmeter之WebService接口测试
一.简介 1.JMeter3.2前的版本,可以使用SOAP/XML-RPC Request插件直接进行webservice接口,而3.2后的版本则已经取消了这个接口,需要另外的方法才能进行测试. 2 ...
- jekyll 将纯文本转化为静态网站和博客 静态网站生成器
jekyll 将纯文本转化为静态网站和博客 静态网站生成器 这个貌似对windows 支持不是很好~ 但是有支持,官方说不建议使用
- iView webapp / Mint UI / MUI [前端UI]
前端UI iView webapp一套高质量的 微信小程序 UI 组件库 https://weapp.iviewui.com/?from=iview Mint UI 基于 Vue.js 的移动端组件库 ...
- DTD DOCTYPE
总结: DOCTYPE是什么 ? 文档类型声明,告诉解析器用什么样的文档类型定义来解析此文档.DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现. 标准模式与兼容模式各有什么区别? 如果页面 ...
- BZOJ 2039 人员雇佣 二元关系 最小割
题面太长了,请各位自行品尝—>人员雇佣 分析: 借用题解的描述: a.选择每个人有一个代价Ai b.如果有两个人同时选择就可以获得收益Ei,j c.如果一个人选择另一个不选会产生代价Ei,j 这 ...
- 梦回----32位CPU和64位CPU的通用寄存器
1 32位Intel的CPU通用寄存器 32位CPU所含有的寄存器有:4个数据寄存器(EAX.EBX.ECX和EDX):2个变址和指针寄存器(ESI和EDI):2个指针寄存器(ESP和EBP):6个段 ...
- 【thinking in java】反射
前言 反射是框架设计的灵魂,使用的前提条件:必须先得到字节码的Class,Class类用于表示字节码,字节码即是.class文件 概述 JAVA反射机制:在程序运行的过程中,对于任意一个类,都可以知道 ...