Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python子线程通过事件与调用者通信_Python_Multithreading - Fatal编程技术网

Python子线程通过事件与调用者通信

Python子线程通过事件与调用者通信,python,multithreading,Python,Multithreading,相关的: 在子线程中捕获异常时: 我需要让线程调用者知道 在相关的帖子中,accepted answer会检查队列,这很好,但它会阻止主调用者执行任何其他操作,因为它会继续检查队列 因此,如果它是基于事件的,那将是理想的 解决方案应该是:主调用者做一些事情(不连续地检查子线程中的队列错误),如果子线程中出现问题,子线程通过一些事件让主调用者知道,主调用者处理错误 我一直在看不同的文章和解决方案,但所有事件内容都是针对主调用方与子线程通信,而不是相反 任何子线程通过事件与调用者通信的解决方案?没有

相关的:

在子线程中捕获异常时:
我需要让线程调用者知道

在相关的帖子中,accepted answer会检查队列,这很好,但它会阻止主调用者执行任何其他操作,因为它会继续检查队列

因此,如果它是基于事件的,那将是理想的

解决方案应该是:主调用者做一些事情(不连续地检查子线程中的队列错误),如果子线程中出现问题,子线程通过一些事件让主调用者知道,主调用者处理错误

我一直在看不同的文章和解决方案,但所有事件内容都是针对主调用方与子线程通信,而不是相反


任何子线程通过事件与调用者通信的解决方案?

没有“线程调用者”这样的东西。所有线程都是相等的

在您的头脑中,“主线程”是一种特殊的东西,因为Python免费提供给您,但就Python而言,主线程和其他线程一样只是一个踏板

因此,您的问题归结为:如何在两个线程之间交换信息

具有一个或多个队列

通常,伪代码如下所示:

  • 创建N个工人,连接到输入和输出队列
  • 将工作放入输入队列
  • 等待输出队列上的结果
  • 连接线程
  • 请注意,您不必在步骤3中阻塞。您还可以询问队列是否有任何元素。如果是这样,那么
    get()
    将不会阻塞。如果它是空的,那么你可以做其他事情

    当您定义一个“kill”命令时,步骤4通常更容易实现,线程对该命令的响应是“我完成了”回复


    然后可以发送N个kill命令并等待N个回复。之后,您可以确保所有线程都已完成。

    调用threading.Thread()的人就是我所说的被调用者我知道get可能是非阻塞的,但是。。然后你必须问这样一个问题:我是否必须在程序运行的整个过程中检查队列?这听起来是个糟糕的解决方案,你多久检查一次,什么时候检查一次,诸如此类。如果它是基于事件的,那么你不必回答这些问题