单线程

时间:2016-09-05 12:09:51

标签: python multithreading sockets queue epoll

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

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

  1. 为epoll.wait设置超时(例如0.5),然后为queue.get_nowait设置为空。 这样,即使没有什么可处理的,cpu资源也会被浪费掉。 并且它不是那么实时。

  2. 使用域套接字而不是队列,以便epoll可以等待两者。 通过这种方式,发送方必须将python-object转换为字符串/二进制数据 转移(反之亦然),这很无聊。

  3. ---他们都不满足我。

    我想知道epoll是否可以等待活动?   - 所以我可以在queue.put()之后使用event.set()。 或

    有解决问题的好方法吗?

    谢谢!

1 个答案:

答案 0 :(得分:0)

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

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