0

查看 KeyboardInterrupt 以退出多线程脚本后,我想知道是否可以使用键盘上的向上和向下键来增加/减少正在使用的线程数?这有望以与 KeyboardInterrupt 相同的方式发生,以便它可以随时发生。这样的事情是否可能,或者是否有另一种更适合这种情况的方法?

def do_something(input_file, threads):
concurrent = threads
l = read_csv(input_file)

for i in range(concurrent):
    t = Thread(target=create_accounts)
    t.daemon = True
    t.start()
try:
    for account in l:
        q.put(account)
    q.join()
except KeyboardInterrupt:
    sys.exit(1)

if __name__ == '__main__':

    threads = 1
    q = Queue(threads * 2)
    do_something('test.csv', threads)
4

1 回答 1

1

AKeyboardInterrupt是一个特殊的东西。在 Unix 上,Python 基本上让终端将 ^C 转换为SIGINT信号,并安装一个信号处理程序来SIGINT引发异常。在 Windows 上,它有点复杂,但基本思想相同。普通按键不会中断您的代码。

但是你可以只用一个线程来听键盘。您的主线程似乎没有做任何有用的事情;如果是,则将该工作启动到后台线程。然后你的主线程可以坐等键盘输入。

但是……你如何等待键盘输入?这是棘手的部分。通常,在大多数平台上,输入是行缓冲的。而且方向键已经有了特殊的含义,就像循环浏览过去条目的历史一样。

您可以通过在 Windows 和Unix 上使用控制台 I/Otermios来在低级别执行此操作,并学习有关字符代码的整个混乱业务,以便您可以实际识别箭头键。但是您可能会发现使用更高级别的包装器要容易得多。有各种各样的选择,从PyGame 或 Qt 等getchconsoleio搜索 PyPI。

于 2015-05-05T23:13:27.687 回答