一起来看看一道近期某国内的量化机构的面试真题吧
你需要实现一个计时程序,程序会使用5个线程/进程,持续打印日志。线程/进程1每秒等间隔打印一次数字1及当前时间,线程/进程2每秒等间隔打印2次2及当前时间,…. 线程/进程5每秒等间隔打印5次5及当前时间。但是,你的计时程序受到了不可控的扰动,每次打印日志时,对应线程/进程将有1%的棚率异常,随机挂起停止打印日志1-5秒钟。当结束挂起后,该线程/进程需要加速打印1秒钟,以弥补停止打印的时间里需要打印但未打印的日志数量,加速打印过程中仍然需要保持日志等间隔打印。请注意,在加速打印环节,打印日志也同样面临概率异常问题。请书写代码实现符合描述的计时程序,包括模拟概率扰动。
提示:可以构造递归
为了实现这个计时程序,我们可以使用Python的多线程库threading
来创建并控制五个线程,每个线程负责一个打印任务。每个线程根据其序号(从1到5)在每秒中打印相应的数字相应次数,并附上当前的时间戳。同时,每个线程将有1%的概率随机挂起1到5秒钟。当线程从挂起中恢复后,需要尽快补充未打印的日志,同时保持等间隔打印。
实现步骤
- 定义线程任务函数:
- 每个线程循环执行打印任务,打印其线程编号对应的数字和当前时间。
- 每次打印后,通过随机数判断是否触发挂起。
- 如果挂起,记录挂起的时间和未打印的数量。
- 恢复后,加速打印未打印的日志。
- 处理挂起和异常情况:
- 使用
random
模块来决定是否发生挂起以及挂起的时长。 - 在加速打印期间,仍然按照1%的概率可能再次触发挂起。
- 使用
- 确保打印等间隔:
- 正常情况下,线程每秒打印对应次数。
- 在加速打印期间,如果需要补充日志,需要计算补充日志的总次数,并根据时间间隔等比例地加速打印。
- 线程的创建和管理:
- 使用
threading.Thread
来创建线程。 - 对每个线程设置守护线程,确保主程序结束时,所有线程也能正常结束。
- 使用
全球各地,CS方面面试,都可以找我们进行代面试或者面试辅助服务,我们的价格公开透明可查(点击查看)。我们支持任意地区英语和汉语普通话的面试。欢迎联系我。