multithread1.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. """
  2. 使用多线程的情况 - 模拟多个下载任务
  3. Version: 0.1
  4. Author: 骆昊
  5. Date: 2018-03-20
  6. """
  7. from random import randint
  8. from time import time, sleep
  9. import atexit
  10. import _thread
  11. def download_task(filename):
  12. print('开始下载%s...' % filename)
  13. time_to_download = randint(5, 10)
  14. print('剩余时间%d秒.' % time_to_download)
  15. sleep(time_to_download)
  16. print('%s下载完成!' % filename)
  17. def shutdown_hook(start):
  18. end = time()
  19. print('总共耗费了%.3f秒.' % (end - start))
  20. def main():
  21. start = time()
  22. # 将多个下载任务放到多个线程中执行
  23. thread1 = _thread.start_new_thread(download_task, ('Python从入门到住院.pdf',))
  24. thread2 = _thread.start_new_thread(download_task, ('Peking Hot.avi',))
  25. # 注册关机钩子在程序执行结束前计算执行时间
  26. atexit.register(shutdown_hook, start)
  27. if __name__ == '__main__':
  28. main()
  29. # 执行这里的代码会引发致命错误(不要被这个词吓到) 因为主线程结束后下载线程再想执行就会出问题
  30. # 需要说明一下 由于_thread模块属于比较底层的线程操作而且不支持守护线程的概念
  31. # 在实际开发中会有诸多不便 因此我们推荐使用threading模块提供的高级操作进行多线程编程