首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python套接字异步发送和接收设计

Python套接字异步发送和接收设计
EN

Stack Overflow用户
提问于 2013-03-14 08:39:19
回答 1查看 5.9K关注 0票数 4

我正在编写python套接字客户端

  1. 每5秒发送一次message one (例如Hello),每15秒发送一次message two (例如15秒)
  2. 随时接收消息

我的意思是在不同的线程中进行发送和接收。然而,它仍然是封闭的。有人有建议吗?

螺纹#1

代码语言:javascript
运行
复制
threading.Thread(target=Thread2, args=(sock)).start()
sock.recv(1024)

螺纹#2

代码语言:javascript
运行
复制
def Thread2(sock):
    count = 0
    while True:
        sleep(5)
        count = count + 5
        sock.send('Hello')
        if count % 15 == 0
            sock.send('15 seconds')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-14 16:38:06

这不是阻挡。只是主线程在第一个sock.recv(1024)之后什么都不做。你必须告诉它要不断地收集数据:

主线程

代码语言:javascript
运行
复制
threading.Thread(target=Thread2, args=(sock,)).start()
while True:
    data = sock.recv(1024)
    if not data:
        break
    print data

请注意,您将不能很容易地中断该进程。为此,需要将线程设置为守护进程:

主线程

代码语言:javascript
运行
复制
t = threading.Thread(target=Thread2, args=(sock,))
t.daemon = True
t.start()
while True:
    data = sock.recv(1024)
    if not data:
        break
    print data

同样,当您传递args时,请记住传递一个元组,即args=(sock,)而不是args=(sock)。对于Python来说,args=(sock)等同于args=sock。这可能就是罪魁祸首!

我看不出你的代码有更多的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15404517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档