如何将参数传递给正在运行的python线程

时间:2017-09-11 11:29:16

标签: python multithreading python-multithreading

我从A扩展了一个类threading.Thread,现在我想将参数传递给正在运行的线程,我可以通过以下脚本获得我想要的线程:

find_thread = None
for thread in enumerate():
    if thread.isAlive():
        name = thread.name.split(',')[-1]
        if name == player_id:
            find_thread = thread #inject the parameter into this thread
            break

其中find_threadthreading.Thread的实例,我在find_thread中有一个队列。

class A(threading.Thread):
    def __init__(self,queue):
        threading.Thread.__init__(self)
        self.queue =queue
    def run():
        if not self.queue.empty(): #when it's running,I want to pass the parameters here
            a=queue.get()
            process(a) #do something

可以这样做吗?

1 个答案:

答案 0 :(得分:1)

您的代码似乎很好,您只需稍微修改它。您已经使用过threading.Queue我相信,您还使用了队列的get方法,因此我想知道为什么您无法使用其put方法:

for thread in enumerate():
    if thread.isAlive():
        name = thread.name.split(',')[-1]
        if name == player_id:
            find_thread = thread
            find_thread.queue.put(...)  # put something here
            break
class A(threading.Thread):
    def __init__(self,queue):
        threading.Thread.__init__(self, queue)
        self.queue = queue
    def run():
        a = queue.get()                 # blocks when empty
        process(a)

queue = Queue()
thread1 = A(queue=queue,...)

我删除了空队列的检查,queue.get阻塞队列为空时在这里​​进行免费检查,这是因为你的线程需要a进行处理。