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百科的解释: 在计算机程序设计中 ...
随机推荐
- JavaScript线程
JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( ...
- bash之数组
Bash 提供索引和联想的一维数组变量.可用作任何变量 索引的数组 :内置的声明将显式声明数组.有没有最大限制 一个数组,也没有要求成员将索引或连续分配的大小.索引的数组 引用使用 (包括算术表达式) ...
- h5 中MP3 播放暂停 jq
<!--音乐--> <div id="music"> <img src="../img/music.gif" class=&quo ...
- 服务器端编程心得(二)—— Reactor模式
最近一直在看游双的<高性能linux服务器编程>一书,下载链接: http://download.csdn.net/detail/analogous_love/9673008 书上是这么介 ...
- 15Spring泛型依赖注入
Spring 4.x中可以为子类注入子类对应的泛型类型的成员变量的引用 BaseService<T>:有RoleService和UserService两的子类 BaseRepepositr ...
- LeetCode(4)Median of Two Sorted Arrays
题目 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...
- 集训第六周 数学概念与方法 计数 排列 L题
Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样. 话 ...
- maven项目运行tomcat7-maven-plugin:run时出现Caused by: java.lang.ClassNotFoundException: org.codehaus.plexus.util.Scanner(xjl456852原创)
使用tomcat7-maven-plugin插件运行web项目时, 出现下面错误: [WARNING] Error injecting: org.sonatype.plexus.build.incre ...
- 如何转成libsvm支持的数据格式并做回归分析
本次实验的数据是来自老师给的2006-2008年的日期,24小时的温度.电力负荷数据,以及2009年的日期,24小时的温度数据,目的是预测2009年每天24小时的电力负荷,实验数据本文不予给出. 用l ...
- npm 发包
前几天封装了公用的locaStorage组件,当然封装后需要发布npm官网,于是摸索了一番终于搞定了,总结下来希望对大家有所帮助 npm安装的package一般支持下面几大类: 本地包 url远程包 ...