python - 当您无法访问启动线程的变量时,如何在 Python 中停止线程?
问题描述
在控制程序的主要 python 文件中,我有一个函数,它为作为参数传入的函数创建线程。
def NewThread(com, Returning: bool, thread_ID, *arguments) -> Any:
"""
Will create a new thread for a function/command.
:param com: Command to be Executed
:param Returning: True/False Will the command return anything?
:param thread_ID: Name of thread created
:param arguments: Arguments to be sent to Command that is started in a thread
"""
class NewThreadWorker(Thread):
def __init__(self, group = None, target = None, name = None, args = (), kwargs = None, *,
daemon = None):
Thread.__init__(self, group, target, name, args, kwargs, daemon = daemon)
self.daemon = True
self._return = None
def run(self):
if self._target is not None:
self._return = self._target(*self._args, **self._kwargs)
def join(self):
Thread.join(self)
return self._return
ntw = NewThreadWorker(target = com, name = thread_ID, args = (*arguments,))
if Returning:
ntw.start()
return ntw.join()
else:
ntw.start()
这个功能很好用,但是我无法与已创建的新线程进行交互。通常,您停止线程所要做的就是(在这种情况下)ntw.join() 但是我无法使用当前的设置来执行此操作。因此,经过多次试验和错误(很多很多错误)后,我想:为什么我不能将线程分配给一个新变量并在其上使用 .join() ?
所以,这让我想到了我的问题:
当您无权访问启动线程的变量(ntw
在这种情况下)时,如何在 python3 中杀死一个线程?
如果可能的话,我想保留 NewThread 函数的设置。(我真的不想为我拥有的每个功能手动管理每个线程,那会非常痛苦)非常感谢任何帮助。
如果您想查看与之集成的项目的源代码在哪里,这里是 github 存储库:https ://github.com/vipersniper0501/CP_Scripts2/blob/dev/GUIs/ScriptRunnerPyQt5_GUI/ScriptGUIrunner.py
编辑:我看过有没有办法杀死一个线程?这并不能回答我的问题。
解决方案
推荐阅读
- mysql - mysql 在添加新索引时有时会删除旧索引?
- c# - “System.InvalidOperationException:'实体类型用户不是当前上下文模型的一部分。'”
- javascript - 维护 Vue 页面之间的状态
- php - 如何将会话 ID 从 foreach 循环传递到下一页
- python-3.x - PySpark - 检查某些列中是否有 NaN 时出错
- python-3.x - 如何在 spyne 中使用“ids”指定请求参数?
- wordpress - 我想知道,他们如何找到我的 wordpress 主题和插件
- javascript - 通过 Firebase 获取 html 到 React 时解析错误
- c# - 设置一个模拟对象属性,然后验证它是否在方法调用中使用
- ajax - 使用CKeditor时提交时重定向AJAX表单