用于网络连接的无限循环

时间:2013-02-27 19:45:02

标签: java python sockets loops connection

使用无限循环进行网络连接是否是一种很好的编程习惯?

示例:

//connect to server
conn = getConnection()
while True:
  data = conn.getData()
  //do something

我希望以有效的方式实现这一点,例如注册事件并使程序进入休眠状态。我正在寻找类似于在Linux中处理信号的实现。

我的目标语言是C,Python和Java。

1 个答案:

答案 0 :(得分:0)

无限循环几乎总是坏的。你想要的是一个无限循环,有一种优雅的退出方式。

尝试这种方法,用Python说明,但你也可以在其他语言中找到它:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import atexit

PID = os.getpid()


@atexit.register
def clean_shut():
    LOGGER.debug("Clean shut performed")

    try:
        os.unlink("module_name.%d" % PID)
    except:
        pass


def main():
    f = open("module_name.%d" % PID, "w")
    f.write("Delete this file to shut module_name cleanly")
    f.close()

    conn = getConnection()

    while os.path.exists("module_name.%d" % PID):
        conn = getConnection()
        # do something

if __name__ == '__main__':
    main()

为了优雅地退出循环(如果您选择这样做),删除生成的module_name.%PID文件以完成最近的迭代,这样您就不会丢失任何数据或破坏您的迭代工作流程。