python - Python-启动线程会使用sys.exit()杀死所有线程

标签 python multithreading

我有线程问题。基本上,当我执行threading.Thread(target=self.d3JpdGVDU1Y(payload)).start()时,这意味着它将创建一个带有目标和该函数参数的新线程。

我的问题是,当我在该线程上执行sys.exit()时,即使应该继续运行main():函数,它也会停止整个脚本,因为我们只是为不同的函数创建一个新线程。

def main():
    # Discord send
    if self.discordWebhook:
        threading.Thread(
            target=sendtoWebhook.c2VuZFRvRGlzY29yZA(self, self.discordWebhook, payload)).start()

    # Send to CSV write
    threading.Thread(target=self.d3JpdGVDU1Y(payload)).start()

--------------------------------

class sendtoWebhook:

    def c2VuZFRvRGlzY29yZA(self, webhook, payload):
        response = requests.post('{}/slack'.format(webhook), json=discord)

        if response.status_code == 200:
            print("Sent to discord!")
            sys.exit()

        elif response.status_code == 429:
            print("Failed printing")
            sys.exit()


它应该做的是杀死sendtoWebhook函数的线程,而不是全部使用sys.exit()进行操作,否则我做错了吗?

最佳答案

您的代码永远不会启动线程。

main()中,您可以执行以下操作:

Thread(target=func_that_calls_sys_exit(foo, bar), ...)

当您打算这样做时:
Thread(target=func_that_calls_sys_exit, args=(foo, bar), ...)

前者在创建任何线程之前调用该方法,旨在将其返回值传递给Thread构造函数的target参数。该调用当然会引发一个SystemExit,因此可以在创建任何线程之前终止您的进程。

关于python - Python-启动线程会使用sys.exit()杀死所有线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60799643/

相关文章:

python - 将 InitSpider 与启动画面 : only parsing the login page? 一起使用

python - 构建一百万个单词串联的后缀树,并使用测试集对其进行查询,以找到最接近的匹配并进行分类

c# - 如何从不同线程更新ASP.NET Web表单?

java - 不明白线程构造函数、start和run方法的输出顺序

ios - 与核心音频线程同步

java - 在 Java 中使用 Thread.interrupt 终止线程

python - 为什么权重不能广播到 Tensorflow 中的值?

python - Django + postgres 关系不存在错误

python - 有没有办法从 C++ 调用 `async` python 方法?

c++ - 关于 C++ 中内存排序的示例