#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异步回调函数的实现的更多相关文章

  1. Python并发编程06 /阻塞、异步调用/同步调用、异步回调函数、线程queue、事件event、协程

    Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 目录 Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件 ...

  2. 跨平台python异步回调机制实现和使用方法

    跨平台python异步回调机制实现和使用方法 这篇文章主要介绍了python异步回调机制的实现方法,提供了使用方法代码 1 将下面代码拷贝到一个文件,命名为asyncore.py 代码如下: impo ...

  3. ArcGIS中使用异步回调函数查询图层Graphic

    在我们的地图的操作中经常会有一些操作是需要通过画多边形或者画线来查找某一块区域内的特定的Graphics比如我们在做的交警的项目中通过框选来查找某一块区域中的摄像机,某一块区域中的警力.警情.警员等相 ...

  4. python 管道 事件(Event) 信号量 进程池(map/同步/异步)回调函数

    ####################总结######################## 管道:是进程间通信的第二种方式,但是不推荐使用,因为管道会导致数据不安全的情况出现 事件:当我运行主进程的 ...

  5. python异步回调顺序?是否加锁?

    话不多说,直接上代码: import time from functools import partial from concurrent.futures.process import Process ...

  6. WPF如何获得变量异步回调函数时产生的异步回调

    有这样的问题,WPF当使用异步回调,需要使用产生的异步变量中的回调函数.数据库中查询诸如异步函数来获得一DataTable.怎样传递给回调函数呢? [方案一]使用全局变量 非常easy想到的是用全局变 ...

  7. python 自定义回调函数

    回调函数用起来比较爽.特别是在js中,满世界全是回调,那么在python中,怎么来优雅地实现自己的回调函数呢 下面贴一个我写的例子 class BaseHandler(object): def cra ...

  8. 前端笔记之JavaScript(九)定时器&JSON&同步异步/回调函数&函数节流&call/apply

    一.快捷位置和尺寸属性 DOM已经提供给我们计算后的样式,但是还是觉得不方便,因为计算后的样式属性值都是字符串类型. 不能直接参与运算. 所以DOM又提供了一些API:得到的就是number类型的数据 ...

  9. 对于Python中回调函数的理解

    关于回调函数,网上有很多说明和各种解释,多数在尝试用语言描述.我认为,如果对各个角色之间的关系不清楚,如果没有相关的编程需求,那么语言便非常无力,很难理解. 这是360百科的解释: 在计算机程序设计中 ...

随机推荐

  1. linux设置ssh连接时间

    相信大家经常遇到SSH连接闲置一会就断开需要重新连接的痛苦,为了使SSH连接保持足够长的时间,我们可以使用如下两种设置 1.sshd服务配置: #vi /etc/ssh/sshd_config Cli ...

  2. hibernate对象状态 的小问题

    Class classA{ List a; public void setA(List a) { this.a =a; } public List getA() { return this.a; } ...

  3. 企业面试之LeetCode刷题心得

    谈起刷LeetCode的心得,想要先扯点别的,说实话我是比较自虐的人,大学时候本专业从来不好好上,一直觊觎着别人的专业,因为自己文科生,总觉得没有项技术在身出门找工作都没有底气,然后看什么炫学什么,简 ...

  4. cksum - 一个文件的检查和以及字节数

    SYNOPSIS(总览) ../src/cksum [OPTION]... [FILE]... DESCRIPTION(描述) 输出CRC(循环冗余校验码)检查和以及每个FILE的字节数. --hel ...

  5. .less css 使用 LESS 简化层叠样式表(CSS)的编写(另外一种css框架 sass)

    使用 LESS 简化层叠样式表(CSS)的编写 https://less.bootcss.com/ Sass完全兼容所有版本的CSS https://gojs.net/latest/samples/f ...

  6. 第2节 mapreduce深入学习:8、手机流量汇总求和

    第2节 mapreduce深入学习:8.手机流量汇总求和 例子:MapReduce综合练习之上网流量统计. 数据格式参见资料夹 需求一:统计求和 统计每个手机号的上行流量总和,下行流量总和,上行总流量 ...

  7. 邮箱地址自动提示jQuery插件

    // mailAutoComplete.js v1.0 邮箱输入自动提示// 2010-06-18 v2.0 使用CSS class类代替CSS对象,同时增强代码可读性// 2010-06-18 v2 ...

  8. Linux从入门到适应(三):Ubuntu16.04将python从3.5升级到3.6

    1 将python从默认的python2.7更换为python3.5 : sudo update-alternatives --install /usr/bin/python python /usr/ ...

  9. NOIP专题复习1 图论-最短路

    一.知识概述 今天我们要复习的内容是图论中的最短路算法,我们在这里讲3种最短路求法,分别是:floyd,dijkstra,spfa. 那么我们从几道例题来切入今天讲解的算法. 二.典型例题 1.热浪 ...

  10. [Python3网络爬虫开发实战] 1.6.1-Flask的安装

    Flask是一个轻量级的Web服务程序,它简单.易用.灵活,这里主要用来做一些API服务. 1. 相关链接 GitHub:https://github.com/pallets/flask 官方文档:h ...