0

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

例子:

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

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

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

4

1 回答 1

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文件以完成最近的迭代,这样您就不会丢失任何数据或破坏每次迭代的工作流程。

于 2013-02-27T20:42:49.023 回答