返回信息流是这样,我想实现一个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继续接受数据,该怎么做呢?求大神指点~~
这是一条镜像帖。来源:北邮人论坛 / python / #4904同步于 2015/1/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
【求助】python一个udp socket定时的问题
buptmuye
2015/1/18镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
谢谢,你是说比如popen一个进程,去执行sleep和之后的逻辑,这样的话server就不会被阻塞socket了吗?然后再接受新的数据就考虑杀死上一个popen进程,再新建新的进程是吗?[ema13]
【 在 zwan0518 (zwan0518) 的大作中提到: 】
: 把执行逻辑与sleep写在一个方法里,创建一个进程执行那个方法?
通过『我邮2.0』发布
试试epoll系统调用。不是Linux的话也有kqueue、poll、select。
python有个模块叫asyncore
python3.4还有asyncio。
来自「北邮人论坛手机版」
信息量很大呀,谢谢暖神,我试试看
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 试试epoll系统调用。不是Linux的话也有kqueue、poll、select。
: python有个模块叫asyncore
: python3.4还有asyncio。
: ...................
通过『我邮2.0』发布
目前我采取的一种解决办法是通过新建进程处理sleep,同时记录进程号,server根据需要kill和重建,不过这种方式显得笨拙。
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 试试epoll系统调用。不是Linux的话也有kqueue、poll、select。
: python有个模块叫asyncore
: python3.4还有asyncio。
: ...................
通过『我邮2.0』发布
不行吧,会阻塞在recvfrom的[ema21]
【 在 asif12 (彩虹之梦) 的大作中提到: 】
: 记录命令1的时间t1,然后while中如果 当前时间 - t1 >= 间隔,就执行命令2
通过『我邮2.0』发布