1

我有一个用 Python 2.7 编写的小型爬虫应用程序,它使用线程来获取大量 URL。但它不能干净地关闭或正确响应键盘中断,尽管我试图用我在这里找到的一些建议来解决后一个问题。

def main():
    ...
    for i in range(NUMTHREADS):
        worker = Thread(target=get_malware, args=(malq,dumpdir,))
        worker.setDaemon(True)
        worker.start()

    ...

    malq.join()


if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        sys.exit()

我需要确保当我按 Ctrl-C 或完成运行时它会正确退出,而不是必须按 Ctrl-Z 并终止工作。

谢谢!

4

1 回答 1

0

讨论了GIL如何影响具有 IO 绑定的多个线程的 Python 应用程序的信号处理。显然 IO 绑定线程导致主线程因处理时间而饿死,并且无法按预期处理信号。我建议查看替代并行处理选项(如subprocess模块或multiprocessing)或异步框架(如asyncoro

于 2013-02-09T03:56:10.960 回答