python cronjob中的多线程问题

发布于 2024-11-25 10:38:11 字数 342 浏览 0 评论 0原文

我有一个 python 程序,它使用 ThreadPool 进行多线程处理。该程序是 shell 脚本中的一个步骤。当我在命令行上手动执行 shell 脚本时,整个流程按预期工作。但是,当我将 shell 脚本作为 cronjob 执行时,似乎流程在 python 多线程步骤完全完成之前就进入了后续步骤。

在 python 程序中,我确实调用 AsyncResult.get(timeout) 来等待所有结果返回,然后再继续。

I have a python program that uses the ThreadPool for multithreading. The program is one step in a shell script. When I execute the shell script manually on the command line, the entire flow works as expected. However, when I execute the shell script as a cronjob, it appears that the flow goes to the next steps before the python multithreading steps are completely finished.

Inside the python program, I do call AsyncResult.get(timeout) to wait for all the results to come back before moving on.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我很OK 2024-12-02 10:38:11

尝试在 crontab 中设置 "TERM=xterm" (或您拥有的任何环境变量,通过终端上的命令“env”计算)。

Try setting "TERM=xterm" (or whatever env variable you have, figure out by command 'env' on your terminal) in your crontab.

北斗星光 2024-12-02 10:38:11

还可以通过 batch(1) 运行您的程序(请参阅命令 man batch 的输出)。如果可以正常工作,但 cron 版本却不能,那么几乎可以肯定是您的环境变量设置有问题。要验证这一点,请从交互式 shell 运行 printenv 以检查您的环境。然后在 crontab 中执行相同的操作(您只需要临时为其设置一个额外的 cron 条目)。在调用 Python 之前尝试在 shell 脚本中设置变量。

另一方面,如果它也无法通过 batch(1) 工作,则可能与您的代码打开的文件有关。尝试使用从 /dev/null 重定向的输入并将输出发送到文件来运行 shell 脚本:

$ /usr/local/bin/myscript </dev/null >|/tmp/outfile.txt 2>&1

Run your program via batch(1) (see the output of the command man batch) as well. If that works OK, but the cron version does not, then it is almost certainly a problem with your environment variable setup. To verify that, run printenv from your interactive shell to inspect your environment there. Then do the same thing inside the crontab (you will just need to temporarily set up an extra cron entry for it). Try setting the variables in your shell script before invoking Python.

On the other hand, if it doesn't work via batch(1) either, it could be something to do with the files that your code has open. Try running your shell script with input redirected from /dev/null and output going to a file:

$ /usr/local/bin/myscript </dev/null >|/tmp/outfile.txt 2>&1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文