Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多线程冻结(?)随机_Python_Multithreading_Freeze - Fatal编程技术网

Python多线程冻结(?)随机

Python多线程冻结(?)随机,python,multithreading,freeze,Python,Multithreading,Freeze,我正在写一个脚本,应该可以从大量的网站上获取一些图片。第一次使用多线程时,认为这里需要多线程,所以获得一个好的运行时。所以问题是:脚本运行了,但是在一系列看似随机的网站通过之后,它就不再继续了。它并没有完全冻结,时间只是从感觉上的1/100秒上升。几分钟左右,有时很长,我只是关闭它。此外,有些网站似乎并不是特别负责,有时它会收到970条,只有200条。以下是守则的相关部分: concurrent = 200 q = Queue(concurrent * 2) def main(listPath

我正在写一个脚本,应该可以从大量的网站上获取一些图片。第一次使用多线程时,认为这里需要多线程,所以获得一个好的运行时。所以问题是:脚本运行了,但是在一系列看似随机的网站通过之后,它就不再继续了。它并没有完全冻结,时间只是从感觉上的1/100秒上升。几分钟左右,有时很长,我只是关闭它。此外,有些网站似乎并不是特别负责,有时它会收到970条,只有200条。以下是守则的相关部分:

concurrent = 200
q = Queue(concurrent * 2)

def main(listPath, usagePath, idListPath):
    [...]
    for i in range(concurrent):
        t = Thread(target=work)
        t.daemon = True
        t.start()
    try: 
        for code in usedIDs:
            q.put(code)
        q.join()

    except KeyboardInterrupt:
        sys.exit(1)


def work():
    while True:
        code = q.get()
        picture = getPicture(code)
        if picture is None:
            pass  # todo: find other source or default
        if not code in usage.keys():
            usage[code] = list()
        usage[code].append(picture)
        q.task_done()

希望我得到了所有重要的代码。提前谢谢

对于这种任务,我更喜欢使用from(使用线程),因为它更容易使用。您可能遇到内存泄漏。当速度减慢时,您是否查看过脚本的任何配置文件,甚至只查看过系统资源?您似乎将图片存储在内存中。如果程序中使用的内存太多(超过RAM的容量),则操作系统必须使用磁盘来提供所需的空间,这非常缓慢。对于此类任务,我更喜欢使用from(使用线程),因为它更易于使用。您可能遇到内存泄漏。当速度减慢时,您是否查看过脚本的任何配置文件,甚至只查看过系统资源?您似乎将图片存储在内存中。如果你在程序中使用了太多的内存(超过了你的RAM所能容纳的),那么你的操作系统必须使用磁盘来提供所需的空间,这是非常缓慢的。