当我在python中侦听套接字时,我如何运行其他代码?

x759pob2  于 2022-12-15  发布在  Python
关注(0)|答案(1)|浏览(104)

我是套接字编程的新手,已经从以下资源创建了一个简单的多连接客户端服务器程序:https://realpython.com/python-sockets/
我的问题可以在下面的代码中找到:

import selectors
sel = selectors.DefaultSelector()

# ...

while True:
    events = sel.select(timeout=None)
    print("This is a test!")
    for key, mask in events:
        if key.data is None:
            accept_wrapper(key.fileobj)
        else:
            service_connection(key, mask)

我的目标是在

events = sel.select(timeout=None)


行,即使没有生成事件。问题是,只要这行代码命中,后面的代码都不会运行,因为它正在等待事件。我如何在没有事件的情况下执行print()语句?
在寻找答案时,我确实遇到了这个线程:Python Socket Programming - need to do something while listening for connections
然而,这似乎比我想做的要多一点(我不需要发送/接收任何东西)。更不用说,我没有看到任何专门解决我的问题的东西(尽管公平地说,我可能没有理解它)。我还看到另一个线程(Running separate code while a socket server is running?)谈论异步,但再次...不太确定如何在我当前的程序中使用它。
对于如何在等待事件时执行print()语句,有人有什么建议吗?

0x6upsns

0x6upsns1#

只需将一个以秒为单位的超时值作为参数传递给选择器函数。
例如:

events = sel.select(timeout=10)

这样,10秒后,它将执行事件后的下一个代码块。
https://docs.python.org/3/library/selectors.html#module-selectors
有关更深入的说明,请参阅文档。
(我知道这个问题是3年前的,但这可能会对某人有所帮助)

相关问题