我试着做以下事情。在
我有8个核心。
我执行如下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
每个if进程都是一个线程应用程序,运行20个线程,其任务是获取一个url。例如,如果我有60K个url,并且我运行一个进程,则作业将完成,所有线程都将生存,直到队列为空
如果我运行多个进程,我会注意到线程开始慢慢消亡,例如每1000个线程就有一个死亡。想法是把一个过程的60K分成8个。螺纹总数为20*8
每个进程都不共享数据。
如果有多个线程执行,为什么一个线程会杀死这个进程?在
我怎样才能修好?在
^{pr2}$我知道如何调试,没有错误。鉴于我有以下情况
while threading.activeCount()>1:
time.sleep(1)
一旦线程都死了,即使队列中还有剩余的项目,代码也会继续执行,直到队列为空。在
很困惑。在
一旦激活计数
.qsize()
返回一个近似的大小。不要使用page_queue.qsize() > 0
检查队列是否为空。您可以使用while True: .. page_queue.get() ..
和一个sentinel来知道何时完成,example或{queue.join()
组合。在在
.run()
方法中捕获异常,以避免过早终止线程。在不要使用
.activeCount()
如果需要n
线程,那么只需创建n
线程。在使你的线程守护程序能够随时中断你的程序。在
如果程序是IO绑定的,则不需要多个进程。否则,您可以使用
multiprocessing
模块来管理多个进程,而不是手动启动它们。在相关问题 更多 >
编程相关推荐