我正在做一个项目。该项目是不断检查用户将访问的网站(例如每3分钟检查一次)。我从两个不同的服务创建了我的项目。一个是与用户通信的服务(我用NodeJS开发的)。另一个是Python服务,它将执行后台检查并将必要的状态通知写入数据库。
我认为Python的库在这方面很强大。我遇到的问题是:假设用户在一段时间后输入了太多的地址。在这种情况下,我如何同时进行控制?
我想到的第一件事是线程,我创建了以下解决方案;
threads = []
for website in websites:
thread = threading.Thread(target=check, args=(website[0],website[1],website[2],))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
这段代码检查了数据库中注册的200个URL地址(测试数据),它同时使用了Thread
来控制,但由于这里使用了太多的Threads
,我认为它是反对使用Thread
的。总之,我认为应该有一个更健康的方法这个方法,在这种情况下我应该遵循哪条路径?我需要修改和工作哪些方法?
谢谢.
1条答案
按热度按时间lbsnaicq1#
总之,我觉得这个方法应该有一个更健康的方法,在这种情况下我应该走哪条路?我需要修改和努力的方法是什么?
在我看来,考虑到单台计算机处理能力的固有限制,一个更具可扩展性的解决方案将涉及实现一个任务队列。例如,如果服务的每个示例可以同时处理多达200个URL,而我们总共有800个URL要检查,我们可以将这些URL分成200个批次,并利用Celery这样的工具来有效地分配工作负载。
考虑到所涉及的网络操作的性质,每个工作者应该实现并行技术,例如线程或协同程序,以最大化性能。