相关疑难解决方法(0)

有没有办法杀死一个线程?

是否可以在不设置/检查任何标志/信号量/等的情况下终止正在运行的线程?

python multithreading kill terminate

710
推荐指数
16
解决办法
71万
查看次数

从线程目标访问“self”

根据许多来源,包括这个问题,将可运行作为target参数传递__init__(带或不带argsand kwargs)比扩展类更可取Thread

如果我创建一个可运行的对象,如何在self不扩展Thread类的情况下传递它正在运行的线程?例如,以下内容可以正常工作:

class MyTask(Thread):
    def run(self):
        print(self.name)
MyTask().start()
Run Code Online (Sandbox Code Playgroud)

但是,我看不到让这个版本工作的好方法:

def my_task(t):
    print(t.name)
Thread(target=my_task, args=(), kwargs={}).start()
Run Code Online (Sandbox Code Playgroud)

这个问题是Python - How can I Implement a 'stoppable' thread? 的后续问题 ,我回答了,但可能不完整。

更新

我想到了一个技巧来使用以下方法来做到这一点current_thread()

def my_task():
    print(current_thread().name)
Thread(target=my_task).start()
Run Code Online (Sandbox Code Playgroud)

问题:调用函数来获取理想情况下应该传入的参数。

更新#2

我发现了一个更黑客的解决方案,它看起来current_thread更具吸引力:

class ThreadWithSelf(Thread):
    def __init__(self, **kwargs):
        args = kwargs.get('args', ())
        args = (self,) + tuple(args)
        kwargs[args] = args
        super().__init__(**kwargs)
ThreadWithSelf(target=my_task).start()
Run Code Online (Sandbox Code Playgroud)

除了极其丑陋之外(例如,通过强制用户仅使用关键字,即使这是文档中推荐的方式),这完全违背了不扩展Thread. …

python multithreading python-3.x

4
推荐指数
1
解决办法
3064
查看次数

标签 统计

multithreading ×2

python ×2

kill ×1

python-3.x ×1

terminate ×1