gpt4 book ai didi

python - 未在 supervisord 下执行的线程

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:01 24 4
gpt4 key购买 nike

我正在开发一个使用线程同时抓取 5 个网站的基本抓取工具。它为每个站点创建一个新线程。当我从 shell 运行程序时,输出日志表明所有 5 个线程都按预期运行。但是当我将这个程序作为 supervisord 运行时程序然后日志表明每次只运行 2 个线程!日志表明所有 5 个线程都已启动,但只有相同的两个正在执行,其余的被卡住了。 我不明白为什么在从 shell 运行时和从主管运行时会发生这种不一致。有什么我没有考虑到的吗?

这是创建线程的代码:

for sid in entries:
url = entries[sid]
threading.Thread(target=self.crawl_loop, \
args=(sid, url)).start()

更新:正如 tdelaney 在评论中所建议的那样,我更改了 supervisord 配置中的工作目录,现在所有线程都按预期运行。虽然我仍然不明白为什么将工作目录设置为爬虫文件目录可以解决问题。或许了解主管如何管理流程的人可以解释一下?

最佳答案

AFAIK python 线程不能正确执行线程,因为它不是线程安全的。它只是为您提供了一个模拟代码同时运行的工具。您的代码仍将仅使用 1 个核心。

https://wiki.python.org/moin/GlobalInterpreterLock

https://en.wikibooks.org/wiki/Python_Programming/Threading

因此它可能不会产生更多的进程/线程。

我认为你应该使用多处理?

https://docs.python.org/2/library/multiprocessing.html

关于python - 未在 supervisord 下执行的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39421985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com