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

时间:2015-08-01 06:15:24

标签: python multithreading

我是线程新手。我使用4个线程在4个不同的东西上运行我的函数。现在我需要在我的函数中设置一个标志,它将对每个标志进行不同的计算。最好的方法是什么? 我正在尝试这样做,这是正确的。如果有更好的方法请建议。

def func(i,flag):
while True:
    if flag==0:
       something
    else:
       something else
       flag-=1

flag=["0","0","0","0"]

try:
   thread.start_new_thread( func, (10,flag[0], ) )
   thread.start_new_thread( func, (11,flag[1], ) )
   thread.start_new_thread( func, (12,flag[2], ) )
   thread.start_new_thread( func, (13,flag[3], ) )

except:
   print "Error: unable to start thread"



#after sometime

flag[0]+=1
flag[2]+=1

1 个答案:

答案 0 :(得分:1)

我看到以下问题:

  1. 使用threading代替thread。 {3}在Python3中消失了。
  2. 您将thread初始化为字符串列表,但随后通过添加1(整数)来递增每个元素。那不行。
  3. 线程无法看到全局变量flag。您在“一段时间后”对列表所做的更改不会影响flag中的局部变量flag。它们是两个不同的对象。修改列表元素不会更改最初传递到func的值,因为它是一个简单的字符串; Python中的字符串具有值(非引用)语义。
  4. 尝试以下方法:

    func

    这是一个相当粗糙,但它做你想要的。 flag=[0,0,0,0] def func(i,thread_index): if flag[thread_index] == 0: something else: something else flag[thread_index] -= 1 try: thread.start_new_thread( func, (10,0)) thread.start_new_thread( func, (11,1)) thread.start_new_thread( func, (12,2)) thread.start_new_thread( func, (13,3)) except: print "Error: unable to start thread" #after sometime flag[0] += 1 flag[2] += 1 是一个全局列表,每个线程访问该列表中的唯一索引。当主线程访问列表时,您会看到flag中的更改,因为它通过封闭容器(列表)对象访问每个元素。