【问题标题】:python wait queue and socket in single thread单线程中的python等待队列和套接字
【发布时间】:2016-09-05 12:09:50
【问题描述】:

我的应用是一个 tcp 服务器,使用 epoll 来等待请求。
我想在同一个循环中等待队列。
即:wake up the thread either socket r/w is available or queue is not empty.

我确实搜索了很多,但没有找到好的解决方案。
我已经考虑了几种解决方法:

  1. 为 epoll.wait 设置一个超时时间(例如 0.5),然后 queue.get_nowait 直到为空。 这样一来,即使没有什么可处理的,也浪费了cpu资源。 而且不是那么实时。

  2. 使用域套接字代替队列,这样epoll可以同时等待。 这样,发送方必须将 python-object 转换为字符串/二进制数据以 传输(和接收器相反),这很无聊。

--- 没有一个能让我满意。

我想知道epoll是否可以等待Event? -- 这样我就可以在 queue.put() 之后使用 event.set()。 或

有什么好的方法可以解决我的问题吗?

谢谢!

【问题讨论】:

    标签: python multithreading sockets queue epoll


    【解决方案1】:

    听起来你应该研究非阻塞套接字。

    https://docs.python.org/2/howto/sockets.html#non-blocking-sockets

    【讨论】:

    • 它已经是非阻塞的...... epoll.wait() 会阻塞,但套接字不会。 -- 如果你的意思是'使 epoll 非阻塞',那会导致死循环和高 cpu
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多