没有循环停止一个线程(一个需要很长时间的函数)

时间:2016-03-11 16:59:16

标签: python multithreading download

我正在编写一个程序,在凌晨3点,它会从文件中读取所有内容并逐个从链接中下载文件,如果是早上7点,则停止这样做(暂停下载)

但我的问题是如果我使用os.system("wget name")我无法阻止它,我无法在while循环中放置一个标记来检查它,因为os.system()赢了& #39; t完成直到下载完成。我无法想到任何其他方式。 我的网络不稳定所以我假设我必须使用wget,我听说urllib但是我不确定它是否适用于我的不稳定连接!

我计划在我的覆盆子Pi上运行ArchLinux

1 个答案:

答案 0 :(得分:1)

您有一个要在上午7点停止的子流程。 Popen.wait有一个超时,所以你要做的就是找出超时并使用它。

import subprocess
import datetime
import time

now = datetime.datetime.now()
stopat = now.replace(hour=7, minute=0, second=0, microsecond=0)
delta = stopat.timestamp() - now.timestamp()
if delta > 0:
    proc = subprocess.Popen("wget name", shell=True)
    try:
        proc.wait(delta)
    except subprocess.TimeoutExpired:
        proc.terminate()
        try:
            proc.wait(2)
        except subprocess.TimeoutExpired:
            proc.kill()