BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #4904同步于 2015/1/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

【求助】python一个udp socket定时的问题

buptmuye
2015/1/18镜像同步12 回复
是这样,我想实现一个sever和client的通信,client发给server一个数据data,一个时间time,其中想在sever端立即执行命令1,同时server过了time时间后执行命令2。 想问下如何实现过了time时间后执行命令2呢?如果直接在命令一后面sleep(times)的话,就会阻塞原有的socket 现在想做的是server是能够实时收到client发来的data和time,只要收到新的数据就会执行命令一,并刷新time间隔,再执行命令二 这个可以实现吗?求大神指点~~[ema23][ema23] client端: import socket port = 8081 host = 'localhost' s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) data = 2 times = 5 s.sendto(b'%d@%d' % (data, times), (host, port)) server端: import socket import subprocess import time port = 8081 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(('', port)) print 'waiting for messages...' while True: data, addr = s.recvfrom(1024) data = int(data.split('@')[0]) times = int(data.split('@')[1]) #执行命令一 ret = subprocess.call("..... %d....." % data, shell=True) print ret time.sleep(times) ret2 = subprocess.call("........... %d..........." % data, shell=True) #想过了times时间后执行命令二,但不要阻塞server继续接受数据,该怎么做呢?求大神指点~~
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
zwan0518机器人#1 · 2015/1/18
把执行逻辑与sleep写在一个方法里,创建一个进程执行那个方法?
buptmuye机器人#2 · 2015/1/18
谢谢,你是说比如popen一个进程,去执行sleep和之后的逻辑,这样的话server就不会被阻塞socket了吗?然后再接受新的数据就考虑杀死上一个popen进程,再新建新的进程是吗?[ema13] 【 在 zwan0518 (zwan0518) 的大作中提到: 】 : 把执行逻辑与sleep写在一个方法里,创建一个进程执行那个方法? 通过『我邮2.0』发布
json123机器人#3 · 2015/1/18
我觉得你需要的是用信号量来解决这个问题。 @nuanyangyang 怎么看?
nuanyangyang机器人#4 · 2015/1/18
试试epoll系统调用。不是Linux的话也有kqueue、poll、select。 python有个模块叫asyncore python3.4还有asyncio。 来自「北邮人论坛手机版」
buptmuye机器人#5 · 2015/1/18
信息量很大呀,谢谢暖神,我试试看 【 在 nuanyangyang (暖羊羊) 的大作中提到: 】 : 试试epoll系统调用。不是Linux的话也有kqueue、poll、select。 : python有个模块叫asyncore : python3.4还有asyncio。 : ................... 通过『我邮2.0』发布
buptmuye机器人#6 · 2015/1/18
目前我采取的一种解决办法是通过新建进程处理sleep,同时记录进程号,server根据需要kill和重建,不过这种方式显得笨拙。 【 在 nuanyangyang (暖羊羊) 的大作中提到: 】 : 试试epoll系统调用。不是Linux的话也有kqueue、poll、select。 : python有个模块叫asyncore : python3.4还有asyncio。 : ................... 通过『我邮2.0』发布
asif12机器人#7 · 2015/1/18
记录命令1的时间t1,然后while中如果 当前时间 - t1 >= 间隔,就执行命令2
buptmuye机器人#8 · 2015/1/18
不行吧,会阻塞在recvfrom的[ema21] 【 在 asif12 (彩虹之梦) 的大作中提到: 】 : 记录命令1的时间t1,然后while中如果 当前时间 - t1 >= 间隔,就执行命令2 通过『我邮2.0』发布
asif12机器人#9 · 2015/1/18
【 在 buptmuye 的大作中提到: 】 : 不行吧,会阻塞在recvfrom的 : : 通过『我邮2.0』发布 确实啊 果然离大神差得远