python - 如何在任意超时后停止 Python 程序

标签 python

举个例子,这段代码是有效的

import urllib

image = urllib.URLopener()
file_ = 1
name = 1
for i in range(1,1000):
    try:
        image.retrieve("http://mangawriter.com/pics/pic"+str(file_)+".jpeg","pic"+str(name)+".jpeg")
        print "save file %s" %file_ 
        name += 1
        file_ += 1
    except IOError:
        file_ += 1

即使代码仍在运行,我如何才能让它在花费一段时间后停止?请帮我弄清楚。

最佳答案

我会使用 multiprocessing模块,它生成用于并行化任务的新进程(不是线程)。

怎么做?首先,实际的下载代码应该放在一个函数中:

import urllib
import multiprocessing
import time

def download_images():
    image = urllib.URLopener()
    file_ = 1
    name = 1
    for i in range(1,1000):
        try:
            image.retrieve("http://mangawriter.com/pics/pic"+str(file_)+".jpeg","pic"+str(name)+".jpeg")
            print "save file %s" %file_ 
            name += 1
            file_ += 1
        except IOError:
            file_ += 1

现在,我们创建一个新的 multiprocessing.Process 对象,将上面的函数作为其目标传递。这个对象将启动一个进程来执行这个函数:

downloader = multiprocessing.Process(target=download_images)

一旦我们创建了进程对象,只需调用它的start() 方法。这将启动一个并行运行的进程:

downloader.start()

由于是并行运行,所以主程序一直在执行。现在,我们定义一个超时,并在这个超时的时间休眠。在下面的示例中,超时为 15 秒:

timeout = 15
time.sleep(timeout)

一旦超时结束,就终止下载进程:

downloader.terminate()

可以找到完整的程序here .

关于python - 如何在任意超时后停止 Python 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8514067/

相关文章:

python - pandas DataFrame 中最大值对应的列名

python - 使用 Seaborn、Pandas 绘制高低图

python - 在 Python 2.5 中,我如何杀死一个子进程?

python - 是否可以将单一回归技术应用于具有不同模式的数据?

python - opencv python 中的轮廓近似每次都会给出错误的结果

Python解析csv文件——用冒号代替逗号

Python、Sqlite3 - 如何将列表转换为 BLOB 单元格

Python 原始套接字 - IP_HDRINCL 选项

python - 从 3 个 View 中创建 3D 对象

python - 如何从图像中删除最大轮廓标记的对象并将其另存为单独的图像?