加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python:使用守护程序线程在一段时间后终止多线程程序

发布时间:2020-12-20 13:49:02 所属栏目:Python 来源:网络整理
导读:我想实现一个程序,该程序将在运行一段时间后终止,并且使用ArgumentParser从命令行读取t.目前我有以下代码(省略一些细节): def run(): parser = create_arg_parser() args = parser.parse_args() class_instance = MultiThreadClass(args.arg1,args.arg2) cl
我想实现一个程序,该程序将在运行一段时间后终止,并且使用ArgumentParser从命令行读取t.目前我有以下代码(省略一些细节):

def run():
    parser = create_arg_parser()
    args = parser.parse_args()
    class_instance = MultiThreadClass(args.arg1,args.arg2)
    class_instance.run()

if __name__ == '__main__':
    run_thread = Thread(target=run)
    run_thread.daemon = True
    run_thread.start()
    time.sleep(3.0)

该程序按预期工作(它在运行3秒后终止).但正如我之前提到的,运行时间(上面的代码片段中的3.0)应该从命令行输入(例如args.arg3 = 3.0)而不是硬编码.显然我不能直接把time.sleep(args.arg3).我想知道是否有任何方法可以解决我的问题?不使用守护程序线程的答案也欢迎!谢谢.

PS.如果我将参数解析代码放在run函数之外,如:

def run(args):
    class_instance = MultiThreadClass(args.arg1,args.arg2)
    class_instance.run()

if __name__ == '__main__':
    parser = create_arg_parser()
    args = parser.parse_args()
    run_thread = Thread(target=run(args))
    run_thread.daemon = True
    run_thread.start()
    time.sleep(args.arg3)

程序不会在args.arg3秒后终止,我对原因感到困惑.如果有人能够解释所有这些背后的魔力,我也将非常感激……非常感谢!

解决方法

在第二个示例中,创建线程时,您应该只传递函数,并且args应该作为第二个参数.像这样:

Thread(target=run,args = (args.arg1,args.arg2))

因此,在第二个示例中,您实际在创建线程之前评估函数,并将None从run函数返回给Thread类.

另外,根据docs,当指定守护进程= True时:

The significance of this flag is that the entire Python program exits
when only daemon threads are left

这应该工作:

def run(arg1,arg2):
    class_instance = MultiThreadClass(arg1,arg2)
    class_instance.run()

if __name__ == '__main__':
    parser = create_arg_parser()
    args = parser.parse_args()
    run_thread = Thread(target=run,args=(args.arg1,args.arg2))
    run_thread.start()
    time.sleep(args.arg3)

This帖子将帮助你开始使用Threads,而且我会阅读docs来更好地理解“魔术”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读