操作的文件描述符选择。选择在Python中

2024-09-29 17:15:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个棘手的问题,我知道可以用很多不同的方法来解决,但是我仍然想知道下面的方法在Python中是否可行。在

假设我有一个套接字,我一直在等待输入,并且有一些条件最终会终止整个程序。我想用一种阻塞的方式,就像我想象的那样,使用选择。选择公司名称:

readfds, writefds, errfds = select.select([mysocket],[],[])
if readfds:
    conn, addr = mysocket.accept()
    ...

现在,如果有一些文件描述符fd,我可以手动设置为就绪状态,读或写,我都可以

^{pr2}$

当然,我可以简单地向mysocket发送一条消息,使其解除阻塞,但我仍然想知道是否有一种编程方法可以将文件描述符操作到就绪状态。在

编辑:我的问题是:我可以手动将文件描述符设置为“就绪”吗?在

谢谢大家。在


Tags: 文件方法程序名称状态方式公司手动
3条回答

使用未命名的管道os.pipe()在这里也能很好地工作(在读端阻塞,在写入端写入),并且不必指定路径。在

我发现这种设置对多线程很有用,当我希望一个线程能够中断另一个线程在select调用上的阻塞时。在

最简单的方法可能是使用^{}创建一个文件对,将read end添加到select()调用中,然后在需要取消阻止时写入到写入端。在

另外,您可能需要考虑在select()调用中添加一个超时;我无法想象您在未阻塞的时间内所做的工作足以降低性能。在

我认为您必须创建一个套接字对(请参见socket.socketpair()函数)并生成一个单独的Python线程(使用threading.Thread类)来观察通知程序何时结束的特殊条件。当线程检测到这个条件时,它可以写“Done!”(或其他)在它的插座对的末端。如果在等待读取的套接字列表中有套接字对的另一端,那么只要“完成”,它就会亮起并表示它是可读的显示并准备从插槽中读取。在

相关问题 更多 >

    热门问题