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。
但是结果是空的,为什么会这样呢?
这是我的较大程序中发生的相同问题。
你近了!:-)
最新版本的代码中的问题在于,尽管将全局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)
| 归档时间: |
|
| 查看次数: |
6400 次 |
| 最近记录: |