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 に答える