在Python中的线程内创建线程

Kev*_*n91 4 python multithreading

我正在使用线程库,并且希望有一个线程可以调用多个线程。该程序的背景是我有一个摄像头,可以捕获Image并使它们在TCP-SocketServer的类中可用。

因此,我需要一个运行相机捕获的线程和另一个运行TCPServer的线程,但是在此线程中,每个进入的连接都有多个线程。

最后一个线程意味着我需要一个可以自己创建线程的线程。不幸的是,这没有用。

我设法将巨大的代码分解成一个小片段,代表了问题所在:

import threading

def adder(x,res,i):
        res[i] = res[i] + x*i;

def creator(a,threads,results):
    results = []
    for i in range(0,a):
        results.append(0)
        threads.append(threading.Thread(target=adder,args=(a,results,i)))
        threads[i].start()
    for i in range(0,len(threads)):
        threads[i].join()

    return results;


threads = [];
results = [];

mainThread = threading.Thread(target=creator,args=([5,threads,results]))
mainThread.start()

mainThread.join()
for i in range(0,len(results)):
    print results[i]
    print threads[i]
Run Code Online (Sandbox Code Playgroud)

creator称为线程的函数中,应该使用funciton创建多个线程adder

但是结果是空的,为什么会这样呢?

这是我的较大程序中发生的相同问题。

Tim*_*ers 5

你近了!:-)

最新版本的代码中的问题在于,尽管将全局results变量传递给creator()creator()但从不使用它:它会创建自己的本地 results列表。当然,修改后者对global无效results,因此保持空白。因此,这是一种修复方法,也可以进行一些局部更改以使代码更加“ Pythonic”:

import threading

def adder(x, res, i):
    res[i] += x*i

def creator(a, threads, results):
    for i in range(a):
        results.append(0)
        t = threading.Thread(target=adder, args=(a, results, i))
        threads.append(t)
        t.start()
    for t in threads:
        t.join()

threads = []
results = []

mainThread = threading.Thread(target=creator, args=(5, threads, results))
mainThread.start()
mainThread.join()
for i in range(len(results)):
    print results[i]
    print threads[i]
Run Code Online (Sandbox Code Playgroud)