如果运行多个进程,Python和Threads线程会慢慢消亡

2024-06-01 06:14:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着做以下事情。在

  1. 我有8个核心。

  2. 我执行如下8个进程,其中core_aa是一个文件名,用于将URL加载到队列中

    python threaded_crawl.py core_aa --max_async_count=20 --use_headers --verbose > /tmp/core_aa.out
    python threaded_crawl.py core_ab --max_async_count=20 --use_headers --verbose > /tmp/core_ab.out
    python threaded_crawl.py core_ac --max_async_count=20 --use_headers --verbose > /tmp/core_ac.out
    python threaded_crawl.py core_ad --max_async_count=20 --use_headers --verbose > /tmp/core_ad.out
    python threaded_crawl.py core_ae --max_async_count=20 --use_headers --verbose > /tmp/core_ae.out
    python threaded_crawl.py core_af --max_async_count=20 --use_headers --verbose > /tmp/core_af.out
    python threaded_crawl.py core_ag --max_async_count=20 --use_headers --verbose > /tmp/core_ag.out
    python threaded_crawl.py core_ah --max_async_count=20 --use_headers --verbose > /tmp/core_ah.out
    
  3. 每个if进程都是一个线程应用程序,运行20个线程,其任务是获取一个url。例如,如果我有60K个url,并且我运行一个进程,则作业将完成,所有线程都将生存,直到队列为空

  4. 如果我运行多个进程,我会注意到线程开始慢慢消亡,例如每1000个线程就有一个死亡。想法是把一个过程的60K分成8个。螺纹总数为20*8

  5. 每个进程都不共享数据。

如果有多个线程执行,为什么一个线程会杀死这个进程?在

我怎样才能修好?在

^{pr2}$

我知道如何调试,没有错误。鉴于我有以下情况

while threading.activeCount()>1:
                time.sleep(1)

一旦线程都死了,即使队列中还有剩余的项目,代码也会继续执行,直到队列为空。在

很困惑。在

一旦激活计数


Tags: pycoreverboseasync进程usecountout
1条回答
网友
1楼 · 发布于 2024-06-01 06:14:35

.qsize()返回一个近似的大小。不要使用page_queue.qsize() > 0检查队列是否为空。您可以使用while True: .. page_queue.get() ..和一个sentinel来知道何时完成,example或{},queue.join()组合。在

.run()方法中捕获异常,以避免过早终止线程。在

不要使用.activeCount()如果需要n线程,那么只需创建n线程。在

使你的线程守护程序能够随时中断你的程序。在

如果程序是IO绑定的,则不需要多个进程。否则,您可以使用multiprocessing模块来管理多个进程,而不是手动启动它们。在

相关问题 更多 >