Python 未在supervisord下执行的线程

Python 未在supervisord下执行的线程,python,multithreading,supervisord,Python,Multithreading,Supervisord,我正在开发一个基本的爬虫程序,它可以同时使用线程抓取5个网站。 它为每个站点创建一个新线程。当我从shell运行程序时,输出日志表明所有5个线程都按预期运行。 但是当我作为一个程序运行这个程序时,日志表明每次只运行两个线程!日志表明所有5个线程都已启动,但只有相同的两个线程正在执行,其余线程被卡住。 我无法理解,当它从shell运行时,以及从主管运行时,为什么会发生这种不一致。有什么我没有考虑的吗 以下是创建线程的代码: for sid in entries: url = entries

我正在开发一个基本的爬虫程序,它可以同时使用线程抓取5个网站。 它为每个站点创建一个新线程。当我从shell运行程序时,输出日志表明所有5个线程都按预期运行。 但是当我作为一个程序运行这个程序时,日志表明每次只运行两个线程!日志表明所有5个线程都已启动,但只有相同的两个线程正在执行,其余线程被卡住。 我无法理解,当它从shell运行时,以及从主管运行时,为什么会发生这种不一致。有什么我没有考虑的吗

以下是创建线程的代码:

for sid in entries:
    url = entries[sid]
    threading.Thread(target=self.crawl_loop, \
                     args=(sid, url)).start()
更新:
正如tdelaney在评论中所建议的,我更改了supervisord配置中的工作目录,现在所有线程都按预期运行。虽然我仍然不明白为什么将工作目录设置为爬虫文件目录可以纠正这个问题。也许一些了解supervisor如何管理进程的人可以解释一下?

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

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

我想你应该使用多重处理


我遇到了相同的静默问题,但后来意识到我正在将daemon设置为true,这导致了主管问题


因此,答案是,daemon=true(当您自己运行脚本时),false(当在主管下运行时)。

我只是遇到了一个非常类似的问题

在我的例子中,我在一台低功耗机器(RaspberryPi)上工作,其线程专用于监听串行设备(Arduino nano on/dev/ttyUSB0)。代码在命令行上运行得很好,但串行读取线程在supervisor下暂停

经过一番尝试(并尝试了这里的所有选项),我尝试在无缓冲模式下运行python,并设法解决了这个问题!我是从你那里得到这个主意的


本质上,我只是使用
-u
标志调用python。

条目来自何处,日志指向何处?使用supervisord时,您的用户名和当前工作目录不同,并且您可能使用的文件与您想象的不同。我确实尝试过使用多处理。同样的结果。我仍然不明白为什么所有线程都以“python crawler.py”的形式从shell运行,但是当我在supervisord中将其添加为作业时,只有相同的两个线程始终运行。如果您能告诉我们如何准确记录您正在运行的线程数,可能会有所帮助?换句话说,如何确定正在运行的线程数?这些线程是预先确定的。5个网站5个线程。我还更新了问题,以反映新的发展。